PHP PDO未执行SQL命令

PHP PDO未执行SQL命令,php,pdo,Php,Pdo,我正在编写一个PHP脚本来重置用户的密码。我有一封电子邮件和一个令牌检查设置,因此在允许用户重置之前,这两个必须是有效的。到目前为止,一切正常,直到我将密码插入数据库为止。以下是我的PDO代码(我在这些部分破坏了SQL查询,因此更容易浏览): 试试看{ $sql=“更新用户” 设置密码=:password,sessionTime=:sessionTime,sessionID=:sessionID 其中sessionID=:sessionID“; $update=$con->prepare($sq

我正在编写一个PHP脚本来重置用户的密码。我有一封电子邮件和一个令牌检查设置,因此在允许用户重置之前,这两个必须是有效的。到目前为止,一切正常,直到我将密码插入数据库为止。以下是我的PDO代码(我在这些部分破坏了SQL查询,因此更容易浏览):

试试看{
$sql=“更新用户”
设置密码=:password,sessionTime=:sessionTime,sessionID=:sessionID
其中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“
已成功更新密码!”; }捕获(PDO$e){ 抛出新异常('密码重置出错',0,$e); }
在此之前定义了
$salt
$password
,当我运行脚本时,它会输出
成功更新密码:name
参数更改为实际字符串时,它工作正常(更新我的数据库),并且不会返回任何错误-此外,我在
php\u error.log
中没有得到任何信息,因此我不确定这为什么不起作用


非常感谢您提供的任何帮助。

您能否使用下面的错误信息运行脚本并报告结果:

<?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);  
}

您是否可以使用如下错误信息运行脚本并报告结果:

<?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);  
}

是的,这就是我得到的信息:
数组(3){[0]=>string(5)“00000”[1]=>NULL[2]=>NULL}
,并且它说它工作了。如果你回显hash(“sha256”,$password.$salt),会发生什么;你得到了什么?我还看到您正在设置“sessionID”,其中sessionID='0'。所以你有两个占位符:sessionID,但只绑定它一次。散列返回它应该返回的内容-我以前做过错误检查。但是,
sessionID
这个东西起作用了!我以为我在前面定义过它,但我忘了每次执行这种查询时都必须绑定它。现在它工作得很好,谢谢!是的,这就是我得到的信息:
array(3){[0]=>string(5)“00000”[1]=>NULL[2]=>NULL}
,并且它说它工作了。如果你回显hash(“sha256”,$password.$salt),会发生什么;你得到了什么?我还看到您正在设置“sessionID”,其中sessionID='0'。所以你有两个占位符:sessionID,但只绑定它一次。散列返回它应该返回的内容-我以前做过错误检查。但是,
sessionID
这个东西起作用了!我以为我在前面定义过它,但我忘了每次执行这种查询时都必须绑定它。现在它工作得很好,谢谢!