PHP使用MySQL';mysqli_多查询';不止一次?

PHP使用MySQL';mysqli_多查询';不止一次?,php,mysql,mysqli,Php,Mysql,Mysqli,尝试执行下面的PHP代码,但只有第一条语句成功执行,其余语句没有成功执行 <?php $link = mysqli_connect('localhost', 'root', ''); mysqli_select_db($link, 'database_name'); $update = " UPDATE `temp` SET `price` = 1000 WHERE `id` = 1; UPDATE `temp` SET `price` = 2000 WHER

尝试执行下面的PHP代码,但只有第一条语句成功执行,其余语句没有成功执行

<?php

$link = mysqli_connect('localhost', 'root', '');
mysqli_select_db($link, 'database_name');


$update = " UPDATE `temp` SET `price` = 1000 WHERE `id` = 1;
            UPDATE `temp` SET `price` = 2000 WHERE `id` = 2;
            UPDATE `temp` SET `price` = 3000 WHERE `id` = 3;
            UPDATE `temp` SET `price` = 4000 WHERE `id` = 4;
            UPDATE `temp` SET `price` = 5000 WHERE `id` = 5;";

mysqli_multi_query($link, $update);

$update2 = "UPDATE `temp` SET `price` = 6000 WHERE `id` = 6;
            UPDATE `temp` SET `price` = 7000 WHERE `id` = 7;
            UPDATE `temp` SET `price` = 8000 WHERE `id` = 8;
            UPDATE `temp` SET `price` = 9000 WHERE `id` = 9;
            UPDATE `temp` SET `price` = 10000 WHERE `id` = 10;";

mysqli_multi_query($link, $update2);

?>

mysqli_多_查询($link,$update)-已成功执行

mysqli\u多重查询($link,$update2)-未执行


如果我可能遗漏了什么,或者关于语法,有谁能给我指点一下。

只使用一个查询怎么样

UPDATE `temp` 
SET `price` = case when id = 1 then 1000 
                   when id = 2 then 2000
                   when id = 3 then 3000
                   when id = 4 then 4000
                   when id = 5 then 5000
                   when id = 6 then 6000
                   when id = 7 then 7000
                   when id = 8 then 8000
                   when id = 9 then 9000
                   when id = 10 then 10000
                   else price
              end

您是否尝试将所有更新合并为一个,然后运行它

 $link = mysqli_connect('localhost', 'root', '');
 mysqli_select_db($link, 'database_name');


 $update = " UPDATE `temp` SET `price` = 1000 WHERE `id` = 1;
        UPDATE `temp` SET `price` = 2000 WHERE `id` = 2;
        UPDATE `temp` SET `price` = 3000 WHERE `id` = 3;
        UPDATE `temp` SET `price` = 4000 WHERE `id` = 4;
        UPDATE `temp` SET `price` = 5000 WHERE `id` = 5;
        UPDATE `temp` SET `price` = 6000 WHERE `id` = 6;
        UPDATE `temp` SET `price` = 7000 WHERE `id` = 7;
        UPDATE `temp` SET `price` = 8000 WHERE `id` = 8;
        UPDATE `temp` SET `price` = 9000 WHERE `id` = 9;
        UPDATE `temp` SET `price` = 10000 WHERE `id` = 10;";

  mysqli_multi_query($link, $update);

类似这样但未经测试的东西。我一直鄙视mysqli处理预处理语句的方式

您必须获取所有结果-例如:

// here: first multi query

// fetch all results
while( mysqli_more_results($link) ){
    $result = mysqli_store_result($link);
    mysqli_next_result($link);
}

// here: second multi query

某些语言中的某些SQL系统是“惰性的”。它们仅在您请求结果时发送查询(例如C#中的LINQ)。也许PHP也会这样做。它会阻止等待结果获取的连接。

为什么不检查错误,看看查询是否有效?如果我将它们捆绑在一个变量中并仅执行该变量,则查询可以工作。
未执行
查询工作
是非常矛盾的statements@YourCommonSense您误解了我的问题,请再次阅读。为什么不简单地查找查询返回的错误?这比在堆栈溢出上发布代码并让很多人猜测可能的错误要有效得多。我会这样做,但我上面的语句是在循环中的,因此在每个循环完成时都会执行该批处理,然后再进行下一批处理。这个答案为您的错误提供了最好的建议解决方法。事实是:最佳实践意味着执行最少数量的数据库调用。运行多少个循环并不重要。构建一个包含
id
price
值的数组,然后在所有迭代完成后,构建一个查询并将数据发送到数据库。告诉我一个原因,这有什么帮助?对于“非惰性”语言,我在评论中读到@这一行就足够了:while(mysqli_next_result($link)){;}//刷新多个查询
// here: first multi query

// fetch all results
while( mysqli_more_results($link) ){
    $result = mysqli_store_result($link);
    mysqli_next_result($link);
}

// here: second multi query