我有包含4000行,我想將它們插入到mysql的.txt文件,這裏有它做同樣的事情兩種方法,第一種方法是簡單的編碼是這樣的:php bindParam()加速批量插入嗎?
$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.
第二種方法是使用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()時可能會出錯?
考慮使用PDO事務:http://php.net/manual/en/pdo.begintransaction.php – Lidor