我想在查询中使用as语句作为别名。我用这段代码:
$query->select($db->quoteName(array('NameInQ as nin', 'Name')));
不管怎样,我得到这个错误:“字段列表”中的“未知列”nameinq as nin NameInQ 作为列名存在于表中。 nin 应该是别名。我做错什么了?
NameInQ
nin
bfhwhh0e1#
当你告诉乔姆拉:
$query->select($db->quoteName(array('NameInQ as nin', 'Name'))); ``` `echo $query->dump();` 会告诉你:
SELECT NameInQ as nin,Name
NameInQ as nin
Name
看看它怎么不知道如何区分别名列名和带有空格的字符串? 文件:https://api.joomla.org/cms-3/classes/jdatabasequery.html#method_quotename 如果要从中为joomla中的列名指定别名 `qn()` / `quoteName()` 方法,则需要为所有列指定相应的别名。
$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-n(旁边没有“(r)” `Name`
1条答案
按热度按时间bfhwhh0e1#
当你告诉乔姆拉:
SELECT
NameInQ as nin
,Name
$query->select($db->quoteName(array('NameInQ', 'Name'), array('nin', 'Name')));
SELECT
NameInQ
ASnin
,Name
ASName
// ^-------^----^---^-^----^----^----^-- everything aliased, everything backtick wrapped
$query->select(array($db->quoteName('NameInQ', 'nin'), $db->quoteName('Name')));
SELECT
NameInQ
ASnin
,Name
$query->select(array('NameInQ AS nin', 'Name'));
$query->select('NameInQ AS nin, Name');