Sestavení jednoho INSERT
příkaz s více řádky je v MySQL mnohem rychlejší než jeden INSERT
výpis na řádek.
To znamená, že to zní, jako byste se mohli potýkat s problémy se zpracováním řetězců v PHP, což je ve skutečnosti problém algoritmu, nikoli jazyk. V zásadě chcete při práci s velkými řetězci minimalizovat zbytečné kopírování. Primárně to znamená, že se chcete vyhnout zřetězení. Nejrychlejší a z paměti nejúčinnější způsob, jak vytvořit velký řetězec, například pro vkládání stovek řádků do jednoho, je využít implode()
funkce a přiřazení pole.
$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));
Výhodou tohoto přístupu je, že při každém zřetězení nekopírujete a znovu nekopírujete příkaz SQL, který jste dosud sestavovali; místo toho to PHP udělá jednou v implode()
prohlášení. Tohle je velký vyhrát.
Máte-li mnoho sloupců k sestavení a jeden nebo více je velmi dlouhých, můžete také vytvořit vnitřní smyčku pro totéž a použít implode()
k přiřazení klauzule hodnot k vnějšímu poli.