Массивный SQL запрос
Есть комбинация INSERT INTO, которая должна вставить в базу 2000 записей. Беда в том, что если я хочу выполнить такой запрос из php, то запрос выполнен не будет. Если вручную - все вставляется на ура. Куда копать, подскажите ? И есть ли какие-нибудь методы у php для взаимодействия с такими большими запросами ?
Пример
$str = "INSERT INTO keywords (id,article_id,word,count)VALUES(NULL,'16','Google','122');INSERT INTO keywords (id,article_id,word,count)VALUES(NULL,'16','Планета','51');INSERT INTO keywords (id,article_id,word,count)VALUES(NULL,'16','Земля','51');........."
..
$query = $connect->query($str);
var_dump($query) // false
Ответы (1 шт):
Автор решения: DrMcSheen
→ Ссылка
Вообще в запросе можно не повторять INSERT INTO и результирующая строка может выглядеть так:
$str = "INSERT INTO keywords (id,article_id,word,count) VALUES
(NULL,'16','Google','122'),
(NULL,'17','Google','123'),
(NULL,'18','Google','124'),
(NULL,'19','Google','125')";
В итоге строку можно формировать так:
$str = "INSERT INTO keywords (id,article_id,word,count) VALUES ";
for (int i=0; i<2000; i++) {
// откуда данные берёте, я не в курсе, поэтому примерно так
$str += "(NULL,'$row1[i]','$row2[i]','$row3[i]'),";
}
$str = substr($str,0,-1);//чтобы убрать последнюю запятую
$query = $connect->query($str);
Кстати, если id - автоинкрементный счетчик, то туда не обязательно передавать NULL.
INSERT INTO keywords (article_id,word,count) VALUES ('16','Google','122')