【发布时间】:2011-04-09 09:26:24
【问题描述】:
$query = "SELECT * FROM `users` WHERE `username` = 'admin'";#works
$query = "SELECT * FROM 'users' WHERE 'username' = 'admin'";#does not work
这是我必须习惯的另一个怪癖,还是发生了什么有趣的事情?
【问题讨论】:
$query = "SELECT * FROM `users` WHERE `username` = 'admin'";#works
$query = "SELECT * FROM 'users' WHERE 'username' = 'admin'";#does not work
这是我必须习惯的另一个怪癖,还是发生了什么有趣的事情?
【问题讨论】:
单引号 (') 和双引号 (") 用于在 MySQL 中指定字符串。反引号 (`) 用于列/表引用。
您的第二个查询将失败,原因有两个:
'users' 指定一个字符串,而不是对表 users 的引用,FROM 需要一个 table reference。'username' = 'admin' 进行字符串比较,字符串username 永远不会等于字符串admin。【讨论】:
用'引用列名是不合法的语法
`(反引号)用于引用标识符。
由于您的所有列都不是保留关键字,因此这也可以:
"SELECT * FROM users WHERE username = 'admin'"
【讨论】:
在 MySQL 中,默认情况下,单引号 (') 和双引号 (") 是文字字符串分隔符,而反引号 (`) 是标识符引号。如果您将 SQL 模式设置为包含 ANSI_QUOTES,则双引号也将是标识符引号,而不是文字字符串分隔符。
【讨论】: