2016-06-21 1 views
2

Я использую функцию codeigniter insert_batch() вместо того, чтобы зацикливать данные с помощью простой вставки. Число моих строк составляет около 390, и только 100 из них вставляются в качестве кодовоза (или mysql) не позволяют вставить более 100 строк в одном запросе.Codeigniter insert_batch проблема ограничения

Тогда я разделил 100 на 100 с array_chunk функции, например:

$all_hafars = array_chunk($hafar_co,100); 
foreach ($all_hafars as $hafar) { 
    $this->db->insert_batch('hafar_co', $hafar); 
} 

Опять только 100 из них вставить! Есть идеи?

Edit: Я даже использовать простую функцию insert с сделки. Когда я использую транзакцию, она снова вставляет только 100 строк.

+0

Попробуйте с транзакции https://www.codeigniter.com/user_guide/database/transactions.html –

+0

@Abdulla вы имеете в виду вместо 'insert_batch' я должен использовать простая функция 'insert' ?? Но это эффективный способ? –

ответ

3

запросов в PHP ограничены опцией конфигурации max_allowed_packet. Он определяет ограничение абсолютной длины в символах, которое может быть в строке запроса. Обратите внимание, что это не просто общий размер вставляемых данных, а вся строка запроса. Команды SQL, знаки препинания, пробелы, и т.д. ...

SHOW VARIABLES WHERE Variable_name LIKE '%max_allowed_packet%' 
+0

Он возвращает меня ** 1048576 **. И что же мне делать? –

+1

Необходимо увеличить размер шрифта. – Kristiyan

+0

да, все. –

1

insert_batch Собираюсь предотвратить некоторые проблемы mysql. I думаю, что это связано с конфигурацией в вашем MySQL. Основная идея - избегать, если вы пытаетесь что-то перекреститься.

Предлагаю вам использовать транзакцию вместо insert_batch.

Вы можете прочитать больше о сделках здесь: https://www.codeigniter.com/user_guide/database/transactions.html

Вы можете прочитать больше о вашей проблеме здесь: https://github.com/bcit-ci/CodeIgniter/issues/2680

+0

вы имеете в виду вместо 'insert_batch', я должен использовать простую функцию' insert' ?? Но это эффективный способ? –

+0

@vahidnajafi, Правильный способ использования простой функции вставки IN 'transaction'. Это означает, что вы будете делать все вставки запросов вместе. это лучше, чем 'insert_batch();' – Kristiyan

+0

, пожалуйста, проверьте мою часть редактирования. Благодарю. –