[英]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.