Я вставляю несколько строк в таблицу и получаю следующее сообщение:
Сервер MySQL пропал
Мой запрос:
INSERT INTO table
(a,b,c,d,e,f,g,h,i,j,k)
VALUES(1,2,3,4,5,6,7,8,9,10,11),(1,2,3,4,5,6,7,8,9,10,11), ...
ON DUPLICATE KEY UPDATE
c=VALUES(c),
d=VALUES(d),
e=VALUES(e),
f=VALUES(f),
g=VALUES(g),
h=VALUES(h),
i=VALUES(i),
j=VALUES(j)
Это потому, что я поместил слишком много значений в один запрос?(Есть около 5000 пар значений из массива, который я взрываю с ,
).
Если это причина - тогда я должен вставлять каждую строку одну за другой?Это медленнее, чем вставлять их все сразу?
Код PHP:
foreach($data as &$entry)
$entry = "('".implode("','", array(
$entry->ID,
addslashes($entry->field_1),
addslashes($entry->field_2),
...
))."')";
$data = implode(',', $data);
$query = "... VALUES{$data} ON ..."
$data
- это массив объектов типа STD ...
изменить снова:)
Поэтому я попытался разбить мой $data
на меньшие массивы по 100 элементов каждый:
$data_chunks = array_chunk($data, 100);
foreach($data_chunks as $data_chunk)
insert_into_db($data_chunk);
, и это работает, я не получаю эту ошибкубольше ...
Это означает, что проблема была в очень длинной строке запроса ...
Теперь я еще больше запутался:
- Есть лиограничение длины запроса или, может быть, аргументы PHP в целом?
- Есть ли разница между вставкой строка за строкой и вставкой нескольких строк?Стоит ли array_chunk ()?