MySQL,在查询中安全地使用保留字

时间:2012-09-22 17:51:36

标签: php mysql reserved-words

我需要从名为key的id键的查询中返回一个多维数组。 (在amazon S3 API中对象键所需)

示例:

Array ( [0] => Array ( [key] => 8 ) [1] => Array ( [key] => 7 ) [2] => Array ( [key] => 6 ) )

问题:key是MySQL中的保留名称。我 使用名称密钥。

以下查询给出错误

SELECT `file_name` AS key FROM (`uploads`)

但在key周围添加反贴词不会出错

SELECT `file_name` AS `key` FROM (`uploads`)

继续这样或有更好的方法是否安全?我想在PHP中重命名数组中的id键,但在查询中执行它似乎更快

2 个答案:

答案 0 :(得分:2)

如上所述,请使用反引号。

来自MYSQL Docs

如果您按第9.2节“模式对象名称”中所述引用保留字,则允许使用保留字作为标识符:

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax ...
near 'interval (begin INT, end INT)'

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

答案 1 :(得分:1)

要远离查询中的表字段周围的保留关键字始终被视为最佳方式...如果您在查询中使用保留关键字,那么backtick允许您使用保留关键字...

由于backtick标准中未定义ANSI SQL,因此从MySQL环境迁移时可能会产生问题......