我正在处理用户注册表单,并且我收到了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')
答案 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保留字不匹配的其他模式来避免这种情况。请参阅此表以供参考:
答案 2 :(得分:0)
你必须在“key”
上使用反引号另外,我不会转义密码,因为它会变成校验和,如果有人在密码中使用'
等字符,它可能会成为一个问题。