忽略将用户输入连接到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()
,因此反斜杠。
我还尝试用反引号封装所有内容,但错误已更改为未知列。
答案 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"
选择字段时应使用`而不是'。