Een for-lus gebruiken?
Maar de snelste optie om gegevens in MySQL te laden is om de te gebruiken LADEN DATA INFILE commando, kunt u het bestand maken om te laden via PHP en het vervolgens via een ander proces naar MySQL voeren (of als laatste stap in het oorspronkelijke proces).
Als u een bestand niet kunt gebruiken, gebruik dan de volgende syntaxis:
insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)
dus je reduceert tot het totale aantal uit te voeren zinnen.
EDIT:Gezien uw fragment, lijkt het erop dat u kunt profiteren van de INSERT ... ON DUBBELE SLEUTEL-UPDATE syntaxis van MySQL, waardoor de database het werk doet en het aantal queries vermindert. Dit veronderstelt dat uw tabel een primaire sleutel of unieke index heeft.
Om de DB elke 100 rijen te raken, kunt u iets doen als (BEOORDEL HET EN REIS HET AAN UW OMGEVING )
$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;
}
}
En executeQueries zou de array pakken en een enkele meervoudige query verzenden:
function executeQueries($queries) {
$data = "";
foreach ($queries as $query) {
$data.=$query.";\n";
}
executeQuery($data);
}