1

我正在编写一个 PHP 脚本来重置用户的密码。我有一个电子邮件和一个令牌检查设置,因此这两个必须在允许用户重置之前有效。到目前为止,一切正常,直到我将密码插入数据库。这是我的 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 回答