查询中的mySQLi语法错误

时间:2013-09-15 18:33:59

标签: php mysql mysqli

我正在处理用户注册表单,并且我收到了mysql语法错误,但我不知道为什么会这样。

$username =  mysqli_real_escape_string($con, $_POST['username']);
$email =  mysqli_real_escape_string($con, $_POST['email']);
$password =  md5(mysqli_real_escape_string($con, $_POST['password']));
$key = md5(rand(1, 1000));
$q = "INSERT INTO users (username, email, password, confirmed, key) 
      VALUES ('$username', '$email', '$password', 0, '$key')";

mysqli_query($con, $q) or die(mysqli_error($con)." Q=".$q);

这不是连接的问题,因为它工作正常。它给了我这个错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'key) VALUES ('jirikrewinkel',   
'jiri@mail.com', '29940b146d722a311446ca2d68f9739d' at line 1 

Q=INSERT INTO users (username, email, password, confirmed, key) VALUES 'jirikrewinkel',
'jiriaesthetics@gmail.com', '29940b146d722a311446ca2d68f9739d', 0,
'd64a340bcb633f536d56e51874281454')

3 个答案:

答案 0 :(得分:1)

您需要使用反引号{/ 1>来reserved words in MySQL转义key

INSERT INTO users (username, email, password, confirmed, `key`) ...
                                here---------------------^---^

通常,您可以在错误消息中看到问题。错误消息中首先出现的问题是问题。

  

您的SQL语法有错误;检查手册...以便在'键附近使用正确的语法

答案 1 :(得分:0)

key是MySQL的保留字,你需要用反引号“

将其括起来
$q = "INSERT INTO users (`username`, `email`, `password`, `confirmed`, `key`) 
      VALUES ('$username', '$email', '$password', 0, '$key')";

最好通过更改设计并将表列重命名为与MySQL保留字不匹配的其他模式来避免这种情况。请参阅此表以供参考:

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

答案 2 :(得分:0)

你必须在“key”

上使用反引号

另外,我不会转义密码,因为它会变成校验和,如果有人在密码中使用'等字符,它可能会成为一个问题。