mysqli_multi_query未在while循环中多次执行

时间:2015-10-22 17:24:23

标签: php mysql sql mysqli

在我的php代码中,我使用了一个while循环,如下所示。

<?php
$connection=mysqli_connect("localhost","root","","entries");
$query1="select * from jobs";
$query1exe=mysqli_query($connection,$query1);
$loopcount=0;
while($query1collector=mysqli_fetch_array($query1exe,MYSQLI_ASSOC)) {
    $query2="insert into learning set name='new_1';
    insert into learning set name='new_2';";
    mysqli_multi_query($connection,$query2);
    $loopcount++;
}
echo($loopcount);
?>

在这段代码中,我得到输出为104($ loopcount),这意味着循环执行了104次。但在我的名为Learning的表中,我只有两个新条目new_1和new_2。我预计会有208个新条目(new_1 104次,new_2 104次)。为什么我没有得到预期的结果。

我正在使用PHP版本5.5.11

P.S我想使用mysqli_multi_query本身,因为我需要同时执行一些查询。

这是我在三次执行代码时学习表的样子

--------------------------------------------------------
slno     | name       | city       | Phone
--------------------------------------------------------
1        | sandeep    | NULL       | NULL
-------------------------------------------------------
2        | new_1      | NULL       | NULL
-------------------------------------------------------
3        | new_2      | NULL       | NULL
-------------------------------------------------------
4        | new_1      | NULL       | NULL
-------------------------------------------------------
5        | new_2      | NULL       | NULL
------------------------------------------------------
6        | new_1      | NULL       | NULL
------------------------------------------------------
7        | new_2      | NULL       | NULL
-------------------------------------------------------

2 个答案:

答案 0 :(得分:2)

我在官方文档here上观看并找到了用户评论

  

如果混合$ mysqli-&gt; multi_query和$ mysqli-&gt;查询,后者将不会被执行!

仅使用mysqli_query,将多个查询拆分为:

mysqli_query($connection,"insert into learning set name='new_1'");
mysqli_query($connection,"insert into learning set name='new_2'");

答案 1 :(得分:2)

我认为在开始另一个多查询之前,您可能需要获取两个查询的结果。

while($query1collector=mysqli_fetch_array($query1exe,MYSQLI_ASSOC)) {
    $query2="insert into learning set name='new_1';
    insert into learning set name='new_2';";
    mysqli_multi_query($connection,$query2) or die('insert new_1 error: ' . mysqli_error($connection));
    mysqli_next_result($connection) or die('insert new_2 error: ' . mysqli_error($connection));
    $loopcount++;
}