0

我需要经常将一堆记录插入表中。我没有将它们逐个插入效率不高,而是使用 INSERT INTO () VALUES (), (), (), ... 批量插入它们,其中每个批次中的记录数不是固定的。有时是 20 条记录,但有时是 56 条,等等。

到目前为止,我只能使用预定数量的参数构建准备好的语句,例如这些示例

那么如何为“INSERT INTO xxx () VALUES (), (), (), ...”这样的查询构建一个准备好的语句,其中 VALUES 之后的记录数不是预先确定的?

4

2 回答 2

1

我想你想使用这样的东西:

<?php
// pdo example

$sql = 'INSERT INTO table (field1, field2, field3) VALUES (:value1, :value2, :value3)';

// $dbh is pdo connection
$insertTable = $dbh->prepare($sql);

$countArray = count($array);
$i = 0;

while ($i < $countArray) {
   $insertTable->bindParam(':value1', $array['value1'][$i], PDO::PARAM_INT); // if value is int
   $insertTable->bindParam(':value2', $array['value2'][$i], PDO::PARAM_STR); // if value is str
   $insertTable->bindParam(':value3', $array['value3'][$i], PDO::PARAM_STR);
   $insertTable->execute();

   $i++;
}

?>
于 2013-05-17T07:21:48.357 回答
0

在这里发现了一些有趣的东西:http: //php.net/manual/en/mysqli.quickstart.prepared-statements.php

请参阅“示例 #4 使用多 INSERT SQL 减少往返次数”:

此外,请考虑对 INSERT 使用 MySQL 多插入 SQL 语法。例如,与上面显示的预处理语句相比,multi-INSERT 需要的服务器和客户端之间的往返次数更少。

<?php
if (!$mysqli->query("INSERT INTO test(id) VALUES (1), (2), (3), (4)")) {
    echo "Multi-INSERT failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
?>

在使用 microtime() 进行一些测试之后,在我看来,如果一次插入很多记录(例如 50 条),坚持多插入语法而不是准备好的语句确实更好。

于 2013-06-06T06:32:05.890 回答