一次进行大量的 数据插入 发现执行起来很慢 之后优化想起 批量添加 想到addAll() 单信不过效率,直追TP源码查看生成语句 才放心使用!
// 批量添加数据
$user = M('user');
//array('表字段'=>'值')
$dataList[] = array('name'=>'php','email'=>'[email protected]');
$dataList[] = array('name'=>'thinkphp','email'=>'[email protected]');
$insertInfo = $user->addAll($dataList);
执行后生成的 sql
INSERT INTO `tb_user` (`name`,`email`) VALUES ('php','[email protected]'), ('thinkphp','[email protected]')
TP 3.2 源码
/**
* 插入记录
* @access public
* @param mixed $datas 数据
* @param array $options 参数表达式
* @param boolean $replace 是否replace
* @return false | integer
*/
public function insertAll($datas,$options=array(),$replace=false) {
if(!is_array($datas[0])) return false;
$fields = array_keys($datas[0]);
array_walk($fields, array($this, 'parseKey'));
$values = array();
foreach ($datas as $data){
$value = array();
foreach ($data as $key=>$val){
$val = $this->parseValue($val);
if(is_scalar($val)) { // 过滤非标量数据
$value[] = $val;
}
}
$values[] = '('.implode(',', $value).')';
}
$sql = ($replace?'REPLACE':'INSERT').' INTO '.$this->parseTable($options['table']).' ('.implode(',', $fields).') VALUES '.implode(',',$values);
return $this->execute($sql);
}