如何检查 UPDATE mysqli 查询是不是正确执行?

Posted

技术标签:

【中文标题】如何检查 UPDATE mysqli 查询是不是正确执行?【英文标题】: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

即使旧密码不正确。

【问题讨论】:

【参考方案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));

试试看。

【讨论】:

最好解释一下它是如何工作的,因为将来阅读此答案的用户可能不理解它或没有理解它所需的上下文。 好吧,你是对的,但在这种情况下,我的回答基于第一个问题

以上是关于如何检查 UPDATE mysqli 查询是不是正确执行?的主要内容,如果未能解决你的问题,请参考以下文章

检查在 UPDATE 查询中修改了哪些列

检查在UPDATE查询中修改了哪些列

MySQLi PHP:使用 MySQLi 检查 SQL INSERT 查询是不是完全成功

mysqli 更新查询是不是应该返回结果?

mysqli或死,它必须死?

我们是不是应该手动检查 mysqli_connect() 错误?