如何使用joomla的quotename()为列名数组分配别名?

5sxhfpxr  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(332)

我想在查询中使用as语句作为别名。我用这段代码:

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

不管怎样,我得到这个错误:
“字段列表”中的“未知列”nameinq as nin NameInQ 作为列名存在于表中。 nin 应该是别名。
我做错什么了?

bfhwhh0e

bfhwhh0e1#

当你告诉乔姆拉:

$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
如果要从中为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` 

相关问题