Массивный 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')
→ Ссылка