从PHP数组向MySQL插入500行

时间:2015-05-23 15:37:29

标签: php mysql pdo bulkinsert

codes

id     code
--    ------
1     BB3CA4
2     2788BA
3     E3E3A5
.        .
.        .
.        .

要添加到$codes表的名为codes的500个半唯一字符串的PHP数组:

$codes = array( 'AC2BE4', 'BC61A2', '34CE5A', ... );

我的PDO数据库连接对象:

$dbh = new PDO( "mysql:host=$host;dbname=$db", $user, $pass );

尝试1

将PDO插入执行在PHP循环中:

foreach( $codes as $code ){
    $stmt = $dbh->prepare("INSERT INTO codes ( code ) VALUES ( :code )");
    $stmt->bindParam( ':code', $code , PDO::PARAM_STR );
    $stmt->execute();
}

我认为这不是一个好的解决方案!

尝试2

第二次尝试是通过粘合500个SQL查询并立即运行来构建一个长SQL查询。

2 个答案:

答案 0 :(得分:3)

执行相同查询但具有不同参数的预处理语句不必多次创建,只需创建一次,因此在循环之前创建语句,然后迭代,绑定参数并在循环内执行查询。

$stmt = $dbh->prepare("INSERT INTO codes ( code ) VALUES ( :code )");
foreach( $codes as $code ){
  $stmt->bindParam( ':code', $code , PDO::PARAM_STR );
  $stmt->execute();
}

使用PDO,您甚至可以通过在执行调用中设置参数来减少代码:

$stmt = $dbh->prepare('INSERT INTO codes ( code ) VALUES ( :code )');
foreach($codes as $code) {
  $stmt->execute(array('code' => $code));
}

答案 1 :(得分:-1)

 $sql = "INSERT INTO codes ( code ) VALUES ";
 foreach($codes as $code){        
    $sql = $sql . "($code),"
 }
 $sql = rtrim($sql,",");

我认为这是一次将500个值插入数据库的简单方法。