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

 

收藏 打印