INSERT INTO xxx()VALUES(),(),(),...的准备语句可变数量的记录?

时间:2013-05-17 07:10:21

标签: php mysql

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

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

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

2 个答案:

答案 0 :(得分: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++;
}

?>

答案 1 :(得分:0)

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

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

  

另外,请考虑使用MySQL多INSERT SQL语法   插入。例如,多INSERT需要较少的往返次数   在服务器和客户端之间,而不是上面显示的准备语句。

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

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