使用insert_batch插入数据

时间:2013-08-26 20:03:53

标签: mysql codeigniter batch-file

我正在使用以下语句在mysql中使用codeigniter插入数据。

$this->db->insert_batch($table, $query);  
动态生成的

$query可以在每个数组元素上具有不同数量的列

可能元素的数量可能因条件而异

    array (
        0 => array(
            'column1'=>'insert1',
            'column2'=>'insert2'
        ),
        1 => array(
            'column1'=>'insert1';
            'column2'=>'insert2',
            'column4'=>'insert4'
        )
)

这可能导致错误或处理来自deafult的编码吗?

我正在构建查询,如下所示

foreach ($sql_xml as $children) {
    $children = $this->xml2array($children);
    foreach ($children as $index => $child) {
        if ($child != 'feed_id') {
            $keys[$index] = $child;
        } 
    }
}

switch (strtolower($this->config[0]->affiliate)) {
    case 'case1':
        $target_xml = $target_xml->productItems;
        break;
    case 'case2':
        $target_xml = $target_xml;
        break;
    default :
        break;
}

$query = array();
$data = array();
foreach ($target_xml as $feeds) {
    $feeds = $this->xml2array($feeds);
    $columns = new RecursiveIteratorIterator(new RecursiveArrayIterator($feeds));
    foreach ($columns as $index => $column) {            
        if (array_key_exists($index, $keys)) {
            if($column != ''){
            $data[$keys[$index]] = $column;
            $data['feed_id']   = $this->id;
            }
            //*TODO //$data['affiliate'] = "'.$this->config[0]->affiliate.'";
        }                
    }
   $query[] = $data;

}


if (count($query > 0)) {
 foreach ($query as $t){

        $this->db->insert($table, $t); 
    }
}

1 个答案:

答案 0 :(得分:2)

阵列需要具有相同数量的“列” 所以我建议如下(如果没有数据,则将某些列设置为null):

array (
    0 => array(
        'column1' => 'insert1',
        'column2' => 'insert2',
        'column3' => null,
        'column4' => null
    ),
    1 => array(
        'column1' => 'insert1',
        'column2' => 'insert2',
        'column3' => 'insert3',
        'column4' => 'insert4'
    )
)

此外,您的语法无效,并且由于您在第一列插入时使用;而不是,,因此会导致错误。