这个SQL语法中的错误在哪里?

时间:2014-08-27 15:19:23

标签: php sql

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

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

我收到错误消息:

  

您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以便在' _' _id \',\' email \',\'附近使用正确的语法。密码\',\'盐\',\'禁止\',\' ban_reason \'来自' tb'在第1行

我在运行查询之前就使用mysqli_real_escape_string(),因此反斜杠。

我还尝试用反引号封装所有内容,但错误已更改为未知列。

3 个答案:

答案 0 :(得分:2)

确切地说。 "在' _id \'"

附近

您使用`backticks`来围绕列名和表名。不是'single quotes'

答案 1 :(得分:2)

你应该逃避你正在插入的变量,而不是你的查询,并在字段名称周围使用反引号

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

答案 2 :(得分:0)

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

选择字段时应使用`而不是'。