function insertBatch($table, $keys, $values, $type = 'INSERT'){
$tempArray = array();
foreach($values as $value){
$tempArray[] = implode('\', \'', $value);
}
return $type.' INTO `'.$table.'` (`'.implode('`, `', $keys).'`) VALUES (\''.implode('), (', $tempArray).'\')';
}
$splitNum = 5;
$data = array(array('a', '1'), array('b', '2'), array('c', '3'), array('d', '4'), array('e', '5'), array('f', '6'), array('g', '7'), array('h', '8'));
foreach(array_chunk($data, $splitNum) as $values){
echo insertBatch('table', array('字段A', '字段B'), $values);
echo '<br>';
}
//http://my.oschina.net/cart/
exit();
这将输出:
INSERT INTO `table` (`字段A`, `字段B`) VALUES ('a', '1), (b', '2), (c', '3), (d', '4), (e', '5')
INSERT INTO `table` (`字段A`, `字段B`) VALUES ('f', '6), (g', '7), (h', '8')
完毕!
上面,你可以适当调整$splitNum的大小,比如调整为50,只要你的内存、bulk_insert_buffer_size、max_allowed_packet足够大,这点数值也可以调整为1000,这样,就是1000条记录分为1次提交到数据库,SQL插入速度立马杠杠上升的!