Składanie jednego INSERT
instrukcja z wieloma wierszami jest znacznie szybsza w MySQL niż jedna INSERT
wyciąg na wiersz.
To powiedziawszy, wygląda na to, że możesz mieć problemy z obsługą ciągów znaków w PHP, co w rzeczywistości jest problemem algorytmu, a nie języka. Zasadniczo, pracując z dużymi ciągami, chcesz zminimalizować niepotrzebne kopiowanie. Przede wszystkim oznacza to, że chcesz uniknąć konkatenacji. Najszybszym i najbardziej wydajnym pod względem pamięci sposobem na zbudowanie dużego ciągu, takiego jak wstawianie setek wierszy naraz, jest skorzystanie z funkcji implode()
funkcja i przypisanie 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 zmontowałeś z każdą konkatenacją; zamiast tego PHP robi to raz w implode()
oświadczenie. To jest duży wygraj.
Jeśli masz dużo kolumn do złożenia, a jedna lub więcej jest bardzo długa, możesz również zbudować wewnętrzną pętlę, aby zrobić to samo i użyć implode()
aby przypisać klauzulę wartości do zewnętrznej tablicy.