以下代码执行得很完美,但某处出现了mySQL错误,产生错误消息。
$sql = mysql_query("UPDATE users SET password = $user_pwd WHERE email = '$user_email' AND authkey = '$user_authkey'");
if(!mysql_query($sql,$config_connect))
{
echo $error .= 'The reset key did not match or has expired';
}
else
{
$approve = 1;
$command .= '<div>Your password has been reset.</div>';
}
错误:
您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 第1行附近的“1”
答案 0 :(得分:4)
我希望您在代码中的某处使用mysql_real_escape_string
。虽然不直接与问题直接相关,但不建议使用mysql扩展。如果您不维护旧版代码,则应切换为PDO或mysqli。
我会像这样重写它然后你可以打印$ sql并自己运行它以更好地了解出现了什么问题(注意密码周围的引号)。
$sql = sprintf("UPDATE users SET `password`='%s' WHERE email='%s' AND authkey = '%s'", $user_pwd, $user_email, $user_authkey);
$result = mysql_query($sql,$config_connect);
if (!$result) {
echo $error .= 'The reset key did not match or has expired';
} else {
$approve = 1;
$command .= '<div>Your password has been reset.</div>';
}
答案 1 :(得分:2)
密码是MySQL中的受限制关键字,在您的查询中引用它。
此:
$sql = mysql_query("UPDATE users SET password = $user_pwd WHERE email = '$user_email' AND authkey = '$user_authkey'");
应该是:
$sql = mysql_query("UPDATE users SET `password` = '$user_pwd' WHERE email = '$user_email' AND authkey = '$user_authkey'");
除非您在$ user_pwd中传递引号,否则您还需要在查询中引用该字符串。
如果可能的话,在数据库中更改该字段名称,以便将来节省一些噩梦般的调试。
答案 2 :(得分:0)
你应该引用$ user_pwd:'$ user_pwd'
答案 3 :(得分:0)
也许我找到了它。
为$ user_pwd&gt;使用apostrophs '$ user_pwd'
我会在sql编辑器上试一试。
答案 4 :(得分:0)
$sql = mysql_query("UPDATE users SET password = '$user_pwd' WHERE email = '$user_email' AND authkey = '$user_authkey'");
您应该将$ user_pwd放在引号中,因为密码必须是字符串字段,并且查询正在尝试为此字段分配一个整数值,这就是抛出语法错误的原因。试试这个修改。