我有这个 MySQL 查询:
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";
它给了我错误;
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“read = 0”附近使用正确的语法
如果我删除:
AND read = 0
部分,它工作得很好。我做错了什么?
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
,您可以摆脱在值周围使用单引号。
使用此查询,您正在尝试使用 mysql 的保留关键字。READ 是保留关键字。使用反引号运算符
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND `read` = '0'";