Składanie jednej INSERT
instrukcji z wieloma wierszami jest znacznie szybsze w MySQL niż jednej INSERT
instrukcji na wiersz.
To powiedziawszy, wygląda na to, że możesz mieć problemy z obsługą ciągów znaków w PHP, co jest tak naprawdę problemem algorytmu, a nie języka. Zasadniczo podczas pracy z dużymi ciągami znaków chcesz zminimalizować niepotrzebne kopiowanie. Przede wszystkim oznacza to, że chcesz uniknąć konkatenacji. Najszybszym i najbardziej wydajnym pod względem pamięci sposobem zbudowania dużego ciągu, na przykład wstawiania setek wierszy w jednym, jest wykorzystanie implode()
funkcji i przypisania tablicy.
$sql = array();
foreach( $data as $row ) {
$sql[] = '("'.mysql_real_escape_string($row['text']).'", '.$row['category_id'].')';
}
mysql_query('INSERT INTO table (text, category) VALUES '.implode(',', $sql));
Zaletą tego podejścia jest to, że nie kopiujesz i nie kopiujesz ponownie instrukcji SQL, które do tej pory składałeś przy każdym konkatenacji; zamiast tego PHP robi to raz w implode()
instrukcji. To wielka wygrana.
Jeśli masz wiele kolumn do złożenia, a jedna lub więcej jest bardzo długich, możesz również zbudować wewnętrzną pętlę, aby zrobić to samo i użyć implode()
do przypisania klauzuli value do tablicy zewnętrznej.