我正在运行多个UPDATE
SQL 查询:
$queriesRun = mysqli_multi_query($connection, $queries);
现在,我如何遍历结果以了解哪些查询成功,哪些失败?PHP 手册让我很头疼,有这么多可以在之后使用的函数。
谢谢!
如何遍历结果以了解哪些查询成功,哪些失败?
int mysqli_stmt_affected_rows (mysqli_stmt $stmt) 和 bool mysqli_next_result (mysqli $link)是您正在寻找的 2 个函数。
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$query = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";
/* execute multi query */
if ($mysqli->multi_query($query)) {
do {
/* store first result set */
if ($result = $mysqli->store_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
/* print divider */
if ($mysqli->more_results()) {
printf("-----------------\n");
}
} while ($mysqli->next_result());
}
/* close connection */
$mysqli->close();
?>
从文档中。
如果您想使用程序样式,请查看文档中的示例。您只需要使用mysqli_more_results
或$mysqli->next_result()
在各种查询之间切换。
这是一个程序风格的 mysqli_multi_query 解决方案,用于获取不返回记录集的查询。它显示每个查询语句、其受影响的行以及来自 $queries 的总受影响行的运行计数。如果发生错误,mysqli_multi_query() 将停止并显示负责的错误。
$single_queries=explode(';',$queries);
if(mysqli_multi_query($connection,$queries)){
do{
echo "<br>",array_shift($single_queries),"<br>";
$cumulative_rows+=$aff_rows=mysqli_affected_rows($connection);
echo "Affected Rows = $aff_rows, ";
echo "Cumulative Affected Rows = $cumulative_rows<br>";
} while(mysqli_more_results($connection) && mysqli_next_result($connection));
}
if($error_mess=mysqli_error($connection)){
echo "<br>",array_shift($single_queries),"<br>Error = $error_mess";
}
输出(假设 5 行存在于 Column1='' 的测试表中):
UPDATE Test SET Column1='changed' WHERE Column1=''
Affected Rows = 5, Cumulative Affected Rows = 5
UPDATE Test SET Column1='changed again' WHERE Column1='changed'
Affected Rows = 5, Cumulative Affected Rows = 10
如果您想要更好地识别查询,请将 $queries 更改为关联数组,其中键描述每个查询,然后查看我的类似帖子: 如何使用 mysqli_multi_query 识别导致错误的查询?