Montando um
INSERT
instrução com várias linhas é muito mais rápida no MySQL do que um INSERT
declaração por linha. Dito isso, parece que você pode estar enfrentando problemas de manipulação de strings no PHP, o que é realmente um problema de algoritmo, não de linguagem. Basicamente, ao trabalhar com strings grandes, você deseja minimizar cópias desnecessárias. Principalmente, isso significa que você deseja evitar a concatenação. A maneira mais rápida e eficiente de memória para construir uma string grande, como inserir centenas de linhas em uma, é tirar proveito do
implode()
atribuição de funções e arrays. $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));
A vantagem dessa abordagem é que você não copia e copia novamente a instrução SQL que montou até agora com cada concatenação; em vez disso, o PHP faz isso uma vez no
implode()
demonstração. Este é um grande vencer. Se você tiver muitas colunas para montar e uma ou mais forem muito longas, você também poderá criar um loop interno para fazer a mesma coisa e usar
implode()
para atribuir a cláusula de valores à matriz externa.