Php 此SQL语法中的错误在哪里?

Php 此SQL语法中的错误在哪里?,php,sql,Php,Sql,忽略将用户输入连接到SQL字符串可能是避免SQL注入(这不是针对生产站点)所能做的最糟糕的事情这一事实,下面的SQL有什么问题 "SELECT '_id', 'email', 'password', 'salt', 'banned', 'ban_reason' FROM 'tbl_users' WHERE 'email'='" . $email . "' LIMIT 1"; 我收到了错误消息: 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第1行“tb”中“\\\\\”、

忽略将用户输入连接到SQL字符串可能是避免SQL注入(这不是针对生产站点)所能做的最糟糕的事情这一事实,下面的SQL有什么问题

"SELECT '_id', 'email', 'password', 'salt', 'banned', 'ban_reason' FROM 'tbl_users' WHERE 'email'='" . $email . "' LIMIT 1";
我收到了错误消息:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第1行“tb”中“\\\\\”、“\'email\”、“\'password\”、“\'salt\”、“\'banked\”、“'ban\'u reason\”附近使用的正确语法

在运行查询之前,我在它上面使用了
mysqli\u real\u escape\u string()
,因此使用了反斜杠

我还尝试将所有内容都包含在backticks中,但随后错误变为unknown列。

正是它显示的位置。“靠近'\'\u id'”

您可以使用
`backticks`
环绕列和表名。不是“单引号”

"SELECT `_id`, `email`, `password`, `salt`, `banned`, `ban_reason` FROM tbl_users WHERE `email`='" . $email . "' LIMIT 1"

选择字段时应使用“而不是”。

应转义插入的变量,而不是查询,并在字段名称周围使用反勾号

$sql = "SELECT `_id`, `email`, `password`, `salt`, `banned`, `ban_reason` FROM `tbl_users` WHERE `email`='" . mysqli_real_escape_string($email) . "' LIMIT 1";

删除所有单引号要在MySQL中转义字段名,请使用反勾号,而不是单引号。不要通过连接字符串将变量插入SQL,请使用带有占位符的准备语句。您的另一个主要问题似乎是在整个SQL查询中应用
mysqli_real_escape_string()
。事实并非如此,也不是。(不要太担心落选——这种情况会发生。但是,在问题中加入关于投票的评论并不理想——问题是面向未来的广大观众的,他们不想阅读有关投票的内容!)尝试过这种方法,但现在错误是“您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在“\”附近使用的正确语法user@example.com\第1行的“限制1”“您是否也在WHERE'email'=…”中添加了反勾号?作为您的示例,我将它们放在列名周围,而不是标准周围。我尝试了很多组合,但都出现了相同的错误消息:/@Adam注意到反斜杠。您是否
mysql\u real\u escape\u string
ing您的整个查询???