sql >> Databasteknik >  >> RDS >> Mysql

Batchinfogning av data till MySQL-databas med hjälp av php

Använder du en for-loop?

Men det snabbaste alternativet för att ladda data till MySQL är att använda LADDA DATAINFIL kommandot kan du skapa filen som ska laddas via PHP och sedan mata den till MySQL via en annan process (eller som ett sista steg i den ursprungliga processen).

Om du inte kan använda en fil, använd följande syntax:

insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)

så du minskar till det totala antalet meningar som ska köras.

EDIT:Med tanke på ditt utdrag verkar det som att du kan dra nytta av INSERT ... ON DUBLIKAT UPPDATERING AV NYCKEL syntax för MySQL, låter databasen göra jobbet och minskar antalet frågor. Detta förutsätter att din tabell har en primärnyckel eller ett unikt index.

För att nå DB var 100:e rad kan du göra något i stil med (GRANSKA DET OCH FIXA DET I DIN MILJÖ )

$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;
    }
}

Och executeQueries skulle ta tag i arrayen och skicka en enda multipelfråga:

function executeQueries($queries) {
   $data = "";
     foreach ($queries as $query) {
        $data.=$query.";\n";
    }
    executeQuery($data);
}


  1. Hur skapar och kör man en dynamisk fråga i oracles lagrade procedur?

  2. Ge MySQL-användare bara de minsta privilegierna

  3. Finns det ett sätt att indexera i postgres för snabba delsträngsökningar

  4. Är det möjligt att köra apriori association regel i mysql statement?