PHP使用MySQL';mysqli_多查询';不止一次?
尝试执行下面的PHP代码,但只有第一条语句成功执行,其余语句没有成功执行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
$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