微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP TP3.2 addAll 刨根问底

一次进行大量的 数据插入 发现执行起来很慢 之后优化想起 批量添加 想到addAll() 单信不过效率,直追TP源码查看生成语句 才放心使用!

// 批量添加数据 

$user = M('user');

//array('表字段'=>'值')

$dataList[] = array('name'=>'PHP','email'=>'admin@gamil.com');

$dataList[] = array('name'=>'thinkPHP','email'=>'admin@gamil.com');

$insertInfo = $user->addAll($dataList);

执行后生成sql

INSERT INTO `tb_user` (`name`,`email`) VALUES ('PHP','admin@gamil.com'),('thinkPHP','admin@gamil.com')

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);

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐