1

ユーザーのパスワードをリセットするための PHP スクリプトを作成しています。ユーザーがリセットを許可される前に、これら2つが有効である必要があるように、電子メールとトークンチェックのセットアップがあります。これまでのところ、パスワードをデータベースに挿入するところまではすべて機能しています。これが私の PDO のコードです (これらの部分で SQL クエリを壊したので、見やすくなっています)。

try {
    $sql = "UPDATE users 
            SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
            WHERE sessionID=:sessionID";
    $update = $con->prepare($sql);
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR);
    $update->bindValue("sessionID", "0", PDO::PARAM_STR );
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR );
    $update->execute();
    echo "<br /> Successfully updated the password!";
} catch(PDOException $e) {
     throw new Exception('something went wrong with the password reset', 0, $e);  
}

$salt$passwordこれより前に定義されており、スクリプトを実行すると出力さSuccessfully updated the password!れますが、データベースでは何も変化しません。クエリをコピーして phpMyAdmin に貼り付け、:nameパラメーターを実際の文字列に変更すると、完全に機能し (データベースを更新)、エラーは返されphp_error.logません。なぜこれが機能しないのですか。

どんな助けでも大歓迎です、ありがとう。

4

1 に答える 1

1

以下のように errorInfo を指定してスクリプトを実行し、結果を報告していただけますか。

<?php

try {
    $sql = "UPDATE users 
            SET password=:password, sessionTime=:sessionTime, sessionID=:sessionID 
            WHERE sessionID=:sessionID";
    $update = $con->prepare($sql);
    $update->bindValue("password", hash("sha256", $password . $salt), PDO::PARAM_STR);
    $update->bindValue("sessionID", "0", PDO::PARAM_STR );
    $update->bindValue("sessionTime", "0", PDO::PARAM_STR );
    $update->execute();

    var_dump($update->errorInfo());
    echo "<br /> Successfully updated the password!";
} catch(PDOException $e) {
     throw new Exception('something went wrong with the password reset', 0, $e);  
}
于 2012-10-10T01:13:14.163 に答える