0

我有这个 MySQL 查询:

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

它给了我错误;

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

如果我删除:

AND read = 0

部分,它工作得很好。我做错了什么?

4

2 回答 2

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";

如果您有权更改表,请更改不在保留关键字列表中的列名,以防止将来再次出现相同的错误。


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

于 2013-05-11T16:19:25.770 回答
0

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

$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND `read` = '0'";
于 2013-05-11T16:19:38.517 回答