我有这个MySQL查询:
$querynotis = "SELECT * FROM notifications WHERE pid = " . $_SESSION['sess_id'] . " AND read = 0";
Run Code Online (Sandbox Code Playgroud)
它给了我错误;
您的SQL语法有错误; 检查与MySQL服务器版本对应的手册,以便在第1行的"read = 0"附近使用正确的语法
如果我删除:
AND read = 0
Run Code Online (Sandbox Code Playgroud)
部分,它完美无缺.我能做错什么?
READ是保留关键字,恰好是列的名称.为了避免语法错误,应使用反引号转义列名称.当然,
$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications WHERE pid = $pid AND `read` = 0";
Run Code Online (Sandbox Code Playgroud)
另一种方式,而不是用反引号逃避它:
$pid = $_SESSION['sess_id'];
$querynotis = "SELECT * FROM notifications n WHERE pid = $pid AND n.read = 0";
Run Code Online (Sandbox Code Playgroud)
如果您有权更改表,请更改保留关键字列表中不存在的列名,以防止同一错误再次返回.
作为一个旁注,查询是脆弱的SQL Injection,如果值(小号变量)从外面走了进来.请查看下面的文章,了解如何防止它.通过使用,PreparedStatements您可以摆脱使用值周围的单引号.