从PHP数组向MySQL插入500行

从PHP数组向MySQL插入500行,php,mysql,pdo,bulkinsert,Php,Mysql,Pdo,Bulkinsert,代码表格 id code -- ------ 1 BB3CA4 2 2788BA 3 E3E3A5 . . . . . . 包含500个半唯一字符串的PHP数组,称为$codes,将添加到codes表中: $codes = array( 'AC2BE4', 'BC61A2', '34CE5A', ... ); 我的PDO数据库连接对象: $dbh = new PDO( "mysql:host=$host;dbna

代码
表格

id     code
--    ------
1     BB3CA4
2     2788BA
3     E3E3A5
.        .
.        .
.        .
包含500个半唯一字符串的PHP数组,称为
$codes
,将添加到
codes
表中:

$codes = array( 'AC2BE4', 'BC61A2', '34CE5A', ... );
我的PDO数据库连接对象:

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

试试1 将PDO insert execute放入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查询,并立即运行它。

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

$stmt = $dbh->prepare("INSERT INTO codes ( code ) VALUES ( :code )");
foreach( $codes as $code ){
  $stmt->bindParam( ':code', $code , PDO::PARAM_STR );
  $stmt->execute();
}
使用
PDO
甚至可以通过在execute调用中设置参数/s将代码精简一点:

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

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

如果只需要一次,您可以使用第一个代码。多次执行是否比将多组括号内插在一起并作为单个查询运行更有效?我不确定这是否更快,但更安全,因为你从注射中得到了额外的保护。当涉及到500个插入时,这其实并不重要,在我看来,这两种方式都很快,而且更容易使用上面的方法来编写。
 $sql = "INSERT INTO codes ( code ) VALUES ";
 foreach($codes as $code){        
    $sql = $sql . "($code),"
 }
 $sql = rtrim($sql,",");