MySQL'AND'给了我错误

时间:2013-05-11 16:18:19

标签: php mysql select

我有这个MySQL查询:

$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";

它给了我错误;

  

您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“read = 0”附近使用正确的语法

如果我删除了:

AND read = 0

部分,它完美无缺。我怎么可能做错了?

2 个答案:

答案 0 :(得分:5)

READ是保留关键字,恰好是您列的名称。为了避免语法错误,应使用反引号转义列名称。前,

$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications WHERE pid = $pid AND `read` = 0";

另一种方式,而不是用反引号转义它:

$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications n WHERE pid = $pid AND n.read = 0";

如果您有权更改表格,请更改保留关键字列表上不存在的列名称,以防止同一错误再次返回。


作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

答案 1 :(得分:0)

使用此查询,您正在尝试使用mysql的保留关键字。 READ是保留关键字。使用反引号运算符

$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND `read` = '0'";