我必须在我的数据库中进行大量插入,从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);
答案 0 :(得分:2)
对于多个插入,您应该使用预准备语句。这种方法可以解决您一次遇到的所有问题。唯一可能的问题(与可能的非最佳数据库设置有关)通过使用事务来解决。
以下代码仅使用单一连接,并且速度尽可能快
$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();
使用交易准备好的报表使其成为文明,安全和有效的解决方案。