mysqli_multi_query();众多提交

时间:2016-02-03 01:09:17

标签: php sql mysqli-multi-query

我有一个PHP脚本,可以准备3个不同的SQL提交。 SQL对所有这些都有效。如果我交换下面的IF语句的顺序,它们都可以工作。如果$ratesSQL是第一个,则1)和2)都工作。如果其他两个中的任何一个是第一个,则只有1)起作用。

SQL:

$sqlRates = "
LOAD XML LOCAL INFILE '/xx/yy/zz/example.xml'
REPLACE
INTO TABLE rates
ROWS IDENTIFIED BY '<row>'";

$vixSQL$aaaSQL都是很多REPLACE INTO语句。例如:

REPLACE INTO aaa (date,value) VALUES ('2016-01-29','4.05'); REPLACE INTO aaa (date,value) VALUES ('2016-01-28','4.07');

IF声明:

1)成功提交以下内容。 $ ratesSQL大约有300行数据。

if (mysqli_multi_query($dbc, $ratesSQL)) {
    echo "<h3>Rates Load Successful</h3><br>";
} else {
    echo "<h3>Rates Load Error</h3><br>";
}

2)成功提交。 ~8000行数据。

if (mysqli_multi_query($dbc, $vixSQL)) {
    echo "<h3>VIX Load Successful</h3><br>";
} else {
    echo "<h3>VIX Load Error</h3><br>";
}

3)提交失败,大约8000行数据

if (mysqli_multi_query($dbc, $aaaSQL)) {
    echo "<h3>AAA Load Successful</h3><br>";
} else {
    echo "<h3>AAA Load Error</h3><br>";
}

$ratesSQL提交只有大约300行数据,而其他两个大约是8000.这个数据量是否导致我出现问题?有什么建议可以绕过吗?

以下每个答案的组合查询都可以让我得到这个。仍然困惑,为什么分离查询失败。任何进一步的信息都会得到赞赏

1 个答案:

答案 0 :(得分:0)

合并所有查询并使用mysqli_multi_query一次

注意:多个查询应以分号连接

$finalSqlQuery = $sqlRates .';'.$vixSQL.$aaaSQL;

if(mysqli_multi_query($dbc,$finalSqlQuery)){
   //Then you can use mysqli_store_result()
   do{
      if($result = mysqli_store_result($dbc)){
         //Note that mysqli_store_result will return a buffer object and false on query error.

          print_r($result);/*display and check what is the results of the query if are you sure that the query doesn't have an error just to check the result of the query*/
          mysqli_free_result($result);
      }

        /* print divider */
        if (mysqli_more_results($dbc)) {
            printf("-----------------\n");
        }


   }while(mysqli_next_result($dbc));
   $result = mysqli_store_result($dbc)
}