Ensamblar uno INSERT
declaración con varias filas es mucho más rápido en MySQL que un INSERT
instrucción por fila.
Dicho esto, parece que podría estar teniendo problemas de manejo de cadenas en PHP, que en realidad es un problema de algoritmo, no de lenguaje. Básicamente, cuando se trabaja con cadenas grandes, desea minimizar las copias innecesarias. Principalmente, esto significa que desea evitar la concatenación. La forma más rápida y eficiente de la memoria para construir una cadena grande, como para insertar cientos de filas a la vez, es aprovechar el implode()
asignación de funciones y arreglos.
$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));
La ventaja de este enfoque es que no copia y vuelve a copiar la instrucción SQL que ha ensamblado hasta ahora con cada concatenación; en cambio, PHP hace esto una vez en el implode()
declaración. Este es un grande ganar.
Si tiene muchas columnas para unir, y una o más son muy largas, también puede crear un ciclo interno para hacer lo mismo y usar implode()
para asignar la cláusula de valores a la matriz externa.