之前用SQLite的时候,连续insert的话,十万级别的插入数据,用事务和不用事务的效果差非常大。最近研究一个功能,需要php对mdb进行连续写入,做两个测试后发现,9W的数据,插入,用事务后比不用事务减少12秒,恩,还不错,以下是示例代码:

<?php
$mdbname="test.mdb";
$filepath="largefile.txt";
$content=file_get_contents($filepath);
$contentArray=explode("\r\n",$content);
try{
$db = new PDO("odbc:driver={microsoft Access driver (*.mdb)};dbq=".realpath($mdbname));
try{
$firstLink="";
$db->beginTransaction();
foreach($contentArray as $k=>$v){
if($firstLink==""){
$firstLink=$searchurl.$v;
}
$sql="insert into Content (PageUrl) values ('".$searchurl.$db->quote($v)."');";
$result = $db->exec($sql);
if(!$result){var_dump($db->errorInfo());};
}
$db->commit();
}catch (Exception $e){
echo "error:".$e->getMessage();
}
}catch(Exception $e){
echo "Failed:".$e->getMessage();
}
?>

用上面的事务的方法,可以解决mdb无法批量insert的问题。性能上嘛,还凑合吧。

因为使用的是PDO的方式,所以才有了其中的事务的方法。
PDO的方法来自:
中文版 http://www.oschina.net/translate/php-pdo-how-to
英文版 http://codular.com/php-pdo-how-to

Related Posts: PHP-mdb-批量insert-事务示例 :