¿Usando un bucle for?
Pero la opción más rápida para cargar datos en MySQL es usar CARGAR ARCHIVO DE DATOS comando, puede crear el archivo para cargar a través de PHP y luego enviarlo a MySQL a través de un proceso diferente (o como un paso final en el proceso original).
Si no puede usar un archivo, use la siguiente sintaxis:
insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)
por lo que reduce la cantidad total de oraciones a ejecutar.
EDITAR:dado su fragmento, parece que puede beneficiarse de INSERT... ON ACTUALIZACIÓN DE CLAVE DUPLICADA sintaxis de MySQL, dejando que la base de datos haga el trabajo y reduciendo la cantidad de consultas. Esto supone que su tabla tiene una clave principal o un índice único.
Para acceder a la base de datos cada 100 filas, puede hacer algo como (REVISE Y ARREGLE A SU ENTORNO )
$insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();
foreach($itemList as $key => $item){
$val1 = escape($item->col1); //escape is a function that will make
//the input safe from SQL injection.
//Depends on how are you accessing the DB
$val2 = escape($item->col2);
$queries[] = $insertOrUpdateStatement1.
"('$val1','$val2')".$insertOrUpdateStatement2.
"col1 = '$val1', col2 = '$val2'";
$counter++;
if ($counter % 100 == 0) {
executeQueries($queries);
$queries = array();
$counter = 0;
}
}
Y executeQueries tomaría la matriz y enviaría una única consulta múltiple:
function executeQueries($queries) {
$data = "";
foreach ($queries as $query) {
$data.=$query.";\n";
}
executeQuery($data);
}