【问题标题】:How to assign aliases to an array of column names with Joomla's quoteName()?如何使用 Joomla 的 quoteName() 为列名数组分配别名?
【发布时间】:2018-10-30 01:38:05
【问题描述】:

我想在查询中对别名使用 AS 语句。 我使用这段代码:

$query->select($db->quoteName(array('NameInQ as nin', 'Name')));

无论如何我都会收到此错误:

'字段列表'中的未知列'NameInQ as nin'

NameInQ 确实作为表中的列名存在。 nin 应该是别名。

我做错了什么?

【问题讨论】:

标签: mysql joomla alias backticks columnname


【解决方案1】:

当你告诉 Joomla:

$query->select($db->quoteName(array('NameInQ as nin', 'Name')));

echo $query->dump(); 会告诉你:

SELECT `NameInQ as nin`,`Name` 

看看它如何不知道如何区分别名列名和带有空格的字符串?

文档:https://api.joomla.org/cms-3/classes/JDatabaseQuery.html#method_quoteName

如果您想通过 qn() / quoteName() 方法在 Joomla 中为列名分配别名,您需要为所有列指定相应的别名。

$query->select($db->quoteName(array('NameInQ', 'Name'), array('nin', 'Name')));

呈现为:

SELECT `NameInQ` AS `nin`,`Name` AS `Name`
//     ^-------^----^---^-^----^----^----^-- everything aliased, everything backtick wrapped

或者,当然您可以个性化 quoteName() 调用,您可以避免每列出现别名。

$query->select(array($db->quoteName('NameInQ', 'nin'), $db->quoteName('Name')));

呈现为:

SELECT `NameInQ` AS `nin`,`Name`

最后,事实是:您甚至不需要 引用任何示例列名,因为查询将是稳定/安全的,无需额外的方法调用。 *我建议将它们排除在外,以最大程度地减少查询膨胀和开发人员的眼睛疲劳。

$query->select(array('NameInQ AS nin', 'Name'));

甚至是原始形式:

$query->select('NameInQ AS nin, Name');

作为记录,Name(MYSQL 不区分大小写)是一个关键字,但它不是保留关键字。

查看 MySQL 文档:https://dev.mysql.com/doc/refman/5.5/en/keywords.html#keywords-5-5-detailed-NName 旁边没有“(R)”

【讨论】:

  • @Claudio 如果您以后有基于 Joomla 的问题,请在 Joomla StackExchange 创建一个帐户并在那里提出您的问题。您不仅会与具有 Joomla 特定专业知识的专门受众交谈,而且现有页面可能已经包含您正在寻找的信息。
猜你喜欢
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
相关资源
最近更新 更多