Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查更新mysqli查询是否正确执行?_Php_Mysqli_Sql Update_Prepared Statement - Fatal编程技术网

Php 如何检查更新mysqli查询是否正确执行?

Php 如何检查更新mysqli查询是否正确执行?,php,mysqli,sql-update,prepared-statement,Php,Mysqli,Sql Update,Prepared Statement,我的情况如下: $sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?'; if($stmt->prepare($sql)) { $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass); $stmt->execute(); } 现在,如何查看更新查询是否成功执行?更确切地说,我如何才能看到旧密

我的情况如下:

$sql = 'UPDATE user SET password = ? WHERE username = ? AND password = ?';
if($stmt->prepare($sql)) {
    $stmt->bind_param('sss', $newPass, $_SESSION['username'], $oldPass);
    $stmt->execute();
}
现在,如何查看更新查询是否成功执行?更确切地说,我如何才能看到旧密码和用户名是否正确,以便存储新密码? 我尝试过这样做:

$res = $stmt->execute();
echo 'Result: '.$res;
但我总是得到:

Result: 1

即使旧密码不正确。

不更新行的查询也不是错误条件。这只是一个成功的查询,没有改变任何东西。要查看更新是否确实更改了任何内容,必须使用不更新行的查询不是错误条件。这只是一个成功的查询,没有改变任何东西。要查看更新是否确实改变了任何内容,您必须使用尝试使用
mysqli\u受影响的行数()
获取受影响的行数。

尝试使用
mysqli\u受影响的行数()
获取受影响的行数。

您需要使用MySQL扩展的
受影响的行数
功能。如果由于没有匹配的行而导致查询失败,则返回0;如果发生错误,则返回1;或者返回显示已更改行数的正数。

您需要使用MySQL扩展的
受影响的\u行
功能。如果由于没有匹配的行而导致查询失败,则返回0;如果发生错误,则返回1;或者返回显示已更改行数的正数

 mysqli_query($link, "UPDATE Language SET Status=1 WHERE Percentage > 50");
 printf("Affected rows (UPDATE): %d\n", mysqli_affected_rows($link));
试试看


试试看。

这可能是一个好主意,解释一下这到底是如何工作的,因为将来阅读此答案的用户可能不理解它,或者没有理解它所需的上下文。好吧,你是对的,但在这种情况下,我基于第一个问题的答案可能是一个好主意,解释一下这到底是如何工作的,作为未来阅读此答案的用户,可能不理解它或不具备理解它所需的上下文。好吧,你是对的,但在这种情况下,我基于第一个问题的答案另一个很好的选择是,我使用它来反馈
UPDATE
查询。关于如何使用$mysqli->info的一个很好的示例是:即使与'WHERE'子句中的任何记录都不匹配(例如,如果您在运行该子句之前已经删除了该记录),它也会返回0。@juanantonitubío这是一个很好的实际检查方法。遗憾的是,它没有内置函数:(另一个很好的选项是,我使用它来反馈
UPDATE
查询。关于如何使用$mysqli->info的一个很好的示例是:即使与'WHERE'子句中的任何记录都不匹配(例如,如果您在运行此操作之前已经删除了该记录),它也将返回0)@juanantonitubío这是一个很好的实际检查方法。遗憾的是,没有内置的功能:(