【问题标题】:How to check if an UPDATE mysqli query is correctly executed?如何检查 UPDATE mysqli 查询是否正确执行?
【发布时间】:2012-10-11 00:10:44
【问题描述】:

这是我的情况:

$sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?';
if($stmt->prepare($sql)) {
    $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass);
    $stmt->execute();
}

现在,如何查看 UPDATE 查询是否成功执行?更准确地说,如何查看旧密码和用户名是否正确,以便我可以存储新密码? 我试过这样做:

$res = $stmt->execute();
echo 'Result: '.$res;

但我总是得到:

Result: 1

即使旧密码不正确。

【问题讨论】:

    标签: php mysqli sql-update prepared-statement


    【解决方案1】:

    不更新行的查询不是错误条件。这只是一个没有改变任何东西的成功查询。要查看更新是否确实改变了任何内容,您必须使用 mysqli_affected_rows()

    【讨论】:

    • 另一个不错的选择是 $mysqli->info,我使用它来获取对 UPDATE 查询的反馈。
    • 如何使用 $mysqli->info 的一个很好的示例是:php.net/manual/en/mysqli.affected-rows.php#116152
    • 即使与“WHERE”子句中的任何记录都不匹配,也会返回 0(例如,如果您之前已经删除了记录以运行它)。
    • @JuanAntonioTubío 这是实际检查的好方法。可悲的是没有内置函数:(
    【解决方案2】:

    尝试使用mysqli_affected_rows() 获取受影响的行数。

    【讨论】:

      【解决方案3】:

      您需要使用您正在使用的 MySQL 扩展的 affected_rows 函数。如果查询因没有匹配的行而失败,这将返回 0,如果发生错误,则返回 -1,或者显示更改的行数的正数。

      【讨论】:

        【解决方案4】:
         mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50");
         printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link));
        

        试试看。

        【讨论】:

        • 最好解释一下它是如何工作的,因为将来阅读此答案的用户可能不理解它或没有理解它所需的上下文。
        • 好吧,你是对的,但在这种情况下,我的回答基于第一个问题
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-10
        • 2023-03-31
        • 1970-01-01
        • 2012-01-26
        • 1970-01-01
        • 2022-01-02
        相关资源
        最近更新 更多