我有一个包含 4,000 行的 .txt 文件,我正在尝试将它们插入 mysql,这里有两种方法可以做同样的事情,第一种方法很简单,编码如下:
$start = microtime(true);
foreach($b as $k=>$v){//$b is an array of 4,000 elements
$db->exec("INSERT INTO siji (en,cn) VALUES ('$v[0]','$v[1]')");
}
echo microtime(true)-$start;//116 sec.
它需要 116 秒。第二种方法是使用 PDO::bindParam(),我知道对于重复的 SQL 查询,使用 bindparam() 是一个好习惯,因为每个查询之间的唯一区别是它们的值,所以我这样编码:
$start = microtime(true);
$stmt = $db->prepare('INSERT INTO siji (en,cn) VALUES (:en,:cn)');
$stmt->bindParam(':en',$en);
$stmt->bindParam(':cn',$cn);
foreach($b as $k=>$v){//$b is an array of 4,000 elements
$en = $v[0];
$cn = $v[1];
$stmt->execute();//
}
echo microtime(true)-$start;//127 sec.
第二种方法被认为比第一种更快,结果不是我想的那样,谁能告诉我 bindparam() 真的加速批量插入吗?或者使用 bindparam() 时可能有什么问题?