2013-11-06 6 views
0

я не могу получить мою голову вокруг этого ...Ошибка базы данных Происходило Номер ошибки: 1054 Неизвестный столбец ... в 'списке поля'

Контроллер:

public function update() 
{ 
    $string = 'xml/gzip'; 
    $xml = simplexml_load_file("compress.zlib://$string"); 
    foreach ($xml->merchant as $merchant) { 
     $merchant_name = $merchant['name']; 
     $merchant_id = $merchant['id']; 
     $data1   = array(
       'merchant_id' => $merchant_id, 
       'merchant_name' => $merchant_name 
     ); 
     $this->load->model('Administration_model'); 
     $this->Administration_model->insert_merchants($data1); 
    } 
} 

Модель:

public function insert_merchants($data1) 
{ 
    $this->db->insert('merchants', $data1); 
} 

foreach петля в моем контроллере работают данные из XML-таблицы, и как ошибка говорит - значения «911» и «website.com» ДОЛЖНО быть вставленными значения ... так почему же это определение ' вес ebsite.com 'как «список полей»?

Ошибка:

A Database Error Occurred 

Error Number: 1054 

Unknown column 'website.com' in 'field list' 

INSERT INTO `merchants` (`merchant_id`, `merchant_name`) VALUES (911, website.com) 

Будет ли это иметь ничего общего с тем, что merchant_id является основным колонки и это технически дубликатом запись ... И если да, то какие-либо советы о том, как добавить «ON DUPLICATE KEY ... "?

+0

Даже если это не имеет значения, загрузите свою модель в начале функции, а не внутри петли. Не имеет значения в том смысле, что если модель уже загружена, 'CI' не будет загружать ее снова. –

ответ

0

Вам нужно указать строки, иначе он думает, что вы имеете в виду имена столбцов.

INSERT INTO `merchants` (`merchant_id`, `merchant_name`) VALUES (911, 'website.com') 
+0

, но '$ this-> db-> insert' делает это автоматически, когда массив передан ... – Alex

+0

, и я просто заметил, что это было как 5 лет назад ... smh – Alex

0

Ваш код не похож на его проблемы. Я бы предложил обновить до последней версии CodeIgniter, в настоящее время 3.1.5, и повторно запустить ваш код.

$data = array(
    'merchant_id' => 911, 
    'merchant_name' => 'website.com', 
); 

$this->db->insert('merchants', $data); 

Если у вас все еще есть проблемы, попробуйте выполнить жесткую кодировку и поставьте, сообщите нам, что произойдет.

Что касается вашей дублирующей ключевой проблемы, CodeIgniter 3.1.5 имеет функцию замены, которая обновляется на дубликат ключа. Имейте в виду потери производительности при использовании этого, так как для большого импорта это может быть очень медленным. Для больших наборов данных загляните в пакетные запросы.

$data = array(
    'merchant_id' => 911, 
    'merchant_name' => 'website.com', 
); 

$this->db->replace('merchants', $data);