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

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

无论如何,我得到这个错误:
“字段列表”中的“未知列”NameInQ as in“
NameInQ作为表中的列名存在。nin应该是别名。
我做错什么了?

最佳答案

当你告诉约姆拉:

$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-N(在Name旁边没有“(R)”

08-28 01:06
查看更多