Сглобяване на един INSERT
оператор с множество реда е много по-бърз в MySQL от един INSERT
изявление на ред.
Въпреки това, изглежда, че може да се сблъскате с проблеми с обработката на низове в PHP, което наистина е проблем с алгоритъма, а не с езика. По принцип, когато работите с големи низове, искате да сведете до минимум ненужното копиране. На първо място, това означава, че искате да избегнете конкатенацията. Най-бързият и най-ефективният от паметта начин за изграждане на голям низ, като например за вмъкване на стотици редове в един, е да се възползвате от implode()
функция и присвояване на масив.
$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));
Предимството на този подход е, че не копирате и повторно копирате SQL израза, който досега сте сглобявали с всяка конкатенация; вместо това PHP прави това веднъж в implode()
изявление. Това е голям победа.
Ако имате много колони за събиране и една или повече са много дълги, можете също да изградите вътрешен цикъл, за да направите същото и да използвате implode()
за да присвоите клаузата за стойности на външния масив.