-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 構文にエラーがあります。1 行目の「1」付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

4

5 に答える 5

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>';
}
于 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 に答える