【问题标题】:mysqli_multi_query function not updating all table rows in databasemysqli_multi_query 函数未更新数据库中的所有表行
【发布时间】:2011-02-08 11:15:31
【问题描述】:

我一直在尝试使用 mysqli_multi_query 一次更新多个表行。我发现这个函数总是导致除 1 行之外的所有行的更新。例如,如果我指定要更新 5 行数据,那么实际上只有 4 行被更新。即使我将行数增加到 6 或 7 等,也只有“n-1”行实际更新(“n”是我指定要更新的数字)。

部分代码如下:

<?php    $jag = mysqli_connect($host, $user, $pass, $db); // connects to the database

            /* check connection */
            if (mysqli_connect_errno()) {
                printf("Connect failed: %s\n", mysqli_connect_error());
                exit();
            }


                            $query2 .= "UPDATE inst_prod_stor SET age_type = '2' WHERE payer_mail = '$pmail' AND file_name = '$fname';";

            print_r($query2);



            // execute the 'update' multi query
            $result2 = mysqli_multi_query($jag, $query2) or die(mysqli_error($jag));

            mysqli_close($jag); ?>

在执行包含此代码的 php 文件后,我还检查了网页上的源代码,这很好。我没有收到任何错误。我实际上使用了“print_r”函数来检查在“mysqli_multi_query”函数执行之前没有遗漏任何数据。事实上,没有遗漏任何数据。每次我执行代码时,函数的结果几乎都是完美的。唯一的缺陷是表中的一行永远不会更新。而且每次都是不同的行。

我真的需要这方面的帮助,在我完成我目前正在从事的项目之前,这几乎是 2 或 3 周编码之旅的最后一站。谢谢!

【问题讨论】:

    标签: php mysqli


    【解决方案1】:

    使用 mysql_real_escape_string 并删除 $query2 附近的 .

    $pmail = mysql_real_escape_string($pmail);
    $fname= mysql_real_escape_string($fname);
    
       $query2 = "UPDATE inst_prod_stor SET age_type = '2' WHERE payer_mail = '$pmail' AND file_name = '$fname';";
    

    【讨论】:

      【解决方案2】:
      $result2 = mysqli_multi_query($jag, $query2) or die(mysqli_error($jag));
      

      只有在 $query2 中的第一个查询有错误时才会 die()。

      我建议您使用 do-while 循环来建立一种使用 mysqli_error() 和 mysqli_affected_rows() 来调试非第一次查询 sql 失败的方法。

      Strict Standards: mysqli_next_result() error with mysqli_multi_query

      【讨论】:

        猜你喜欢
        • 2017-03-08
        • 2012-04-28
        • 2020-07-04
        • 2016-12-31
        • 2011-04-05
        • 2019-10-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多