mysqli_multi_query();大量提交
mysqli_multi_query(); numerous submissions
我有一个 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 行。是否是这个数据量导致我出现问题?有什么绕过它的建议吗?
结合下面每个答案的查询可以让我解决这个问题。仍然对为什么单独的查询失败感到困惑。任何进一步的信息将不胜感激
合并所有查询并使用 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)
}
我有一个 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 行。是否是这个数据量导致我出现问题?有什么绕过它的建议吗?
结合下面每个答案的查询可以让我解决这个问题。仍然对为什么单独的查询失败感到困惑。任何进一步的信息将不胜感激
合并所有查询并使用 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)
}