繁体   English   中英

如何遍历mysqli_multi_query()以找出哪些查询成功?

[英]How to loop through mysqli_multi_query() to find out what queries succeeded?

我正在运行多个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解决方案,用于获取不返回记录集的查询。 它显示每个查询语句,其受影响的行以及来自$查询的受影响行总数的运行计数。 如果发生错误,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

如果您想要更好识别的查询,请将$查询更改为关键数据,其中键描述每个查询,然后查看我的类似帖子: 如何使用mysqli_multi_query识别导致错误的查询?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM