繁体   English   中英

foreach循环中的MySQLi多查询

[英]Mysqli multi query in foreach loop

我必须在数据库中做很多插入操作,从xml导入数据。 现在, 如果我在循环中打开和关闭连接,该脚本可以工作,但会崩溃以获取最大连接数,如果我使用以下代码,则它仅执行一次mysqli_multi_query。

我只需要知道如何维护连接以在循环中执行新的多查询。

$xml = simplexml_load_file('demo.xml');
$mysqli =new mysqli($servername, $username, $password, $dbname);
foreach($xml->datas as $data) {
    $sql="INSERT IGNORE INTO table1 (hobby) values ('".$data->child74."');";
    $sql.="INSERT IGNORE INTO table2 (pizza, spaghetti) values ('".$data->child55."', '".$data->child52."');";
    // a lot more insert...
    mysqli_multi_query($mysqli,$sql);
}
mysqli_close($mysqli);

对于多个插入,您应该使用准备好的语句 这种方法将立即解决您遇到的所有问题。 通过使用事务解决了唯一可能的问题(与可能的非最佳数据库设置有关)。

下面的代码仅使用单个连接,并且尽可能快

$xml = simplexml_load_file('demo.xml');

$stmt1 = $mysqli->prepare("INSERT IGNORE INTO table1 (hobby) values (?)");
$stmt1->bind_param("s",$hobby);

$stmt2 = $mysqli->prepare("INSERT IGNORE INTO table2 (pizza, spaghetti) values (?,?)");
$stmt2->bind_param("ss", $pizza, $spaghetti);

$mysqli->autocommit(FALSE);
foreach($xml->order as $data) {
    $hobby = $data->child74;
    $pizza = $data->child55;
    $spaghetti = $data->child52;
    $stmt1->execute();
    $stmt2->execute();
}
$mysqli->commit();
$mysqli->close();

带有交易的预先准备的报表使其成为文明,安全和有效的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM