我有这个MySQL查询:
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";
它给了我错误;
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以便在第1行的“read = 0”附近使用正确的语法
如果我删除了:
AND read = 0
部分,它完美无缺。我怎么可能做错了?
答案 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'";