Збір одного 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()
для присвоєння пункту значень зовнішньому масиву.