0

我正在处理用户注册表单,但遇到 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')
4

3 回答 3

1

您需要像反引号一样转义MySQL 中的保留字key

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

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

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

于 2013-09-15T18:35:08.360 回答
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

于 2013-09-15T18:36:40.060 回答
0

您必须在“key”上使用反引号

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

于 2013-09-15T18:38:48.427 回答