PHP TP3.2 addAll 刨根问底

一次进行大量的 数据插入 发现执行起来很慢 之后优化想起 批量添加 想到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);
    }

猜你喜欢

转载自blog.csdn.net/appAndWxy/article/details/85095812