2

これを機能させるのに問題があります。エラーは準備されたステートメントの構文にあると思いますが、いくつかの異なる方法を試しましたが、うまくいきませんでした。エラーが準備されたステートメントにあると思われる理由はecho Not a Match、変数が一致しない場合はページに表示されるためですが、一致するとエラーのない空白のページが表示されるためです。これが私のコードです。おそらく、誰かがエラーを見つけて、さまざまな方法を試し続けるでしょう。

    function setPass($conn, $userCurrent, $oldPass, $newPass, $verPass)

{        
    $stmt= $conn->prepare('SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent');
    $stmt->execute(array(':userCurrent' => $userCurrent));
    while ($pass = $stmt->fetch()){
    $oldDbPass = $pass['password'];
    }

$new_pass = md5($newPass);

    if (md5($oldPass) == ($oldDbPass) && ($newPass) == ($verPass)) {
try{
        $stmt= $conn->prepare('UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent');
        $stmt->execute(array(':newpass' => $new_pass, ':userCurrent' => $userCurrent));
} catch (PDOException $e){
    echo 'Connection failed: ' . $e->getMessage();
}

        echo "Match";
    } else {
        echo "Not a Match";

    }

}
4

1 に答える 1

4

バッククォートの括弧を間違えています。バッククォート「`」を使用して、SQL のテーブル名と列名をエスケープします。

SELECT `password` FROM `CLL_users` WHERE `user_name`=:userCurrent

UPDATE `CLL_users` SET `password`=:newPass WHERE `user_name`=:userCurrent

また、いくつかのタイプミスがあります。

  • $newPassキャメルケースとして宣言され$new_passていますが、2番目のexecuteステートメントのように使用されています。
  • PDO ステートメントで大文字と小文字が区別されるかどうかはわかりませんが、PDO 変数を次のように宣言し、次のように:newPass使用しています。:newpassexecute

今後のために、PDO でのエラー チェック/処理についてお読みください。

于 2012-11-04T00:59:02.450 に答える