2013-08-26 4 views
1

Я использую следующий оператор для вставки данных в mysql с помощью codeigniter.Вставить данные с insert_batch

$this->db->insert_batch($table, $query); 

$query генерируется динамически может иметь различное количество столбцов на каждом элементе массива

и, возможно, количество элементов может отличаться от состояния

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

это могло привести к ошибке или обрабатывает codigniter от глухоты?

Я построение запроса, как это следует

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

ответ

2

массиву необходимо будет иметь такое же количество «колонны».
Так что я бы рекомендовал не являются следующим (настройка определенных столбцов в null если нет нет данных):

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

Кроме того, ваш синтаксис является недействительным, и это приведет к ошибке, так как вы используете ; вместо , на первой вставке колонки.

+0

спасибо за отзыв Я только что сделал тест и посмотрел в источнике, и, как вы говорите, нужно иметь такое же количество «столбцов». Я сделал цикл foreach ($ query as $ t) { $ this-> db-> insert_batch ($ table, array ($ t)); }, но я должен подтвердить жизнеспособность этого запроса. – fefe

+0

Возможно, вы могли бы просто создать цикл построения '$ query' вместо цикла с методом' insert_batch'. Затем просто передайте '$ query' один раз на' insert_batch'. – doitlikejustin

Смежные вопросы