sql >> Database teknologi >  >> RDS >> Mysql

Batch-indsættelse af data til MySQL-database ved hjælp af php

Bruger du en for-løkke?

Men den hurtigste mulighed for at indlæse data i MySQL er at bruge INDLÆS DATAINFIL kommando, kan du oprette filen til at indlæse via PHP og derefter føre den til MySQL via en anden proces (eller som et sidste trin i den oprindelige proces).

Hvis du ikke kan bruge en fil, skal du bruge følgende syntaks:

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

så du reducerer til det samlede antal sætninger, der skal køres.

EDIT:Givet dit uddrag, ser det ud til, at du kan drage fordel af INSERT ... ON DUBLIKAT NØGLEOPDATERING syntaks af MySQL, lader databasen gøre arbejdet og reducerer mængden af ​​forespørgsler. Dette antager, at din tabel har en primær nøgle eller et unikt indeks.

For at ramme DB for hver 100 rækker kan du gøre sådan noget som (GENNEMGÅ DEN OG LAS DET TIL DIT 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;
    }
}

Og executeQueries ville gribe arrayet og sende en enkelt multiple forespørgsel:

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


  1. ORA-29481:Implicitte resultater kan ikke returneres til klienten, når der kaldes Oracle 12c-procedure fra JDBC

  2. INSERT IGNORE vs INSERT ... PÅ DUBLIKAT NØGLOPDATERING

  3. ALTER SESSION SET nls_date_format virker ikke i APEX. Virker dog i SQL Developer

  4. CodeIgniter:Lagrer et billede i databasen?