2016-06-21 9 views
2

私はcodeigniter insert_batch()を使用しています。単純な挿入でデータをループするのではなく、私の行の数は約390であり、codeigniter(またはmysql)は1つのクエリに100を超える行を挿入することはできません。Codeigniter insert_batch制限の問題

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

もう一度だけ100それらの挿入:

は、その後、私はこのように、array_chunk機能と100で100を分離しました!何か案が?

編集:私もトランザクションでシンプルなinsert関数を使用します。トランザクションを使用すると、再び100行しか挿入されません。

+0

あなたの代わりに私が使用しなければなりませんinsert_batch' 'の平均取引https://www.codeigniter.com/user_guide/database/transactions.html –

+0

@Abdullaで試してみてください単純な 'insert'関数??しかし、これは効率的な方法ですか? –

答えて

3

https://www.codeigniter.com/user_guide/database/transactions.html

あなたがここにあなたの問題の詳細を読むことができます。これは、クエリ文字列ができる文字の絶対長制限を定義します。これは、挿入されるデータの合計サイズだけではなく、クエリ文字列全体です。 SQLコマンド、句読点、スペース、等...

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

私は1048576 **を返します。では、私はどうしたらいいですか? –

+1

このサイズを大きくする必要があります。 – Kristiyan

+0

はい、それです。 –

1

insert_batchmysqlの制限の問題を防ぐ予定です。私は あなたのMySQLの設定に関連していると思う。主なアイデアは、何かをクロスしようとするのを避けることです。

insert_batchの代わりにトランザクションを使用することをおすすめします。

現在のトランザクションの詳細を読むことができます:PHPのクエリがmax_allowed_packet設定オプションによって制限されているhttps://github.com/bcit-ci/CodeIgniter/issues/2680

+0

あなたは 'insert_batch'の代わりに意味します。私は単純な' insert'関数を使わなければなりません??しかし、これは効率的な方法ですか? –

+0

@vahidnajafi、簡単な挿入機能を使用する正しい方法は 'トランザクション'です。 これは、すべての挿入クエリを一緒に実行することを意味します。それは 'insert_batch(); 'よりも優れています – Kristiyan

+0

私の編集部分をチェックしてください。ありがとう。 –

関連する問題