从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,",");