3

可能重复:
MySQL - 何时使用单引号、双引号和反引号?

问题 1

为什么这行得通?

"SELECT `id` FROM `table` WHERE x= '".$y."'"

但不是这个?

"SELECT `id` FROM `table` WHERE 'x' = '".$y."'"
                                ^ ^
                              Notice the extra single quotes

问题 2使用id`id` 更好 (带有奇怪的引号)?还是因为双引号将其解释为变量?

4

1 回答 1

6

因为服务器读取x为一个值,因为它是用single quote. backtick转义查询中使用的保留关键字,通常用于包装columnNamestableNames

在您的查询中,

SELECT `id` FROM `table` WHERE 'x' = '$y'

x没有,而是一个字符串值。

对于问题 2,您可以消除这些反引号,id因为它不是 a Reserved Keyword,这是 MySQL 中保留关键字的完整列表

作为旁注,查询很容易受到SQL Injection. 请看下面的文章,了解如何预防。通过使用 PreparedStatements,您可以摆脱在值周围使用单引号。

于 2012-12-25T04:06:35.877 回答