-1

下面的代码执行得很好,但是在某个地方出现了一个产生错误消息的 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”附近使用正确的语法

4

5 回答 5

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>';
}
于 2012-06-20T19:24:37.183 回答
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 中传递引号,否则您还需要在查询中引用该字符串。

如果可能的话,请更改数据库中的该字段名称,以免将来进行一些噩梦般的调试。

于 2012-06-20T19:24:52.203 回答
0

你应该引用 $user_pwd : '$user_pwd'

于 2012-06-20T19:09:17.500 回答
0

也许我找到了。

对 $user_pwd > '$user_pwd' 使用撇号

我会在 sql 编辑器上试试。

于 2012-06-20T19:11:02.237 回答
0
$sql = mysql_query("UPDATE users SET password = '$user_pwd' WHERE email = '$user_email' AND authkey = '$user_authkey'");

您应该将 $user_pwd 放在引号中,因为密码必须是字符串字段,并且查询正在尝试为该字段分配整数值,这就是引发语法错误的原因。试试这个修改。

于 2012-06-20T19:12:46.387 回答