PHP mySQL查询中的错误无法追踪

时间:2012-06-20 19:05:48

标签: php mysql mysql-error-1064

以下代码执行得很完美,但某处出现了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”

5 个答案:

答案 0 :(得分:4)

我希望您在代码中的某处使用mysql_real_escape_string。虽然不直接与问题直接相关,但不建议使用mysql扩展。如果您不维护旧版代码,则应切换为PDOmysqli

我会像这样重写它然后你可以打印$ 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放在引号中,因为密码必须是字符串字段,并且查询正在尝试为此字段分配一个整数值,这就是抛出语法错误的原因。试试这个修改。