sql >> Databasteknik >  >> RDS >> Mysql

MySQL Bulk Insert via PHP

Om du använder en förberedd sats kan du gå över dina $JSON_data array med en foreach loop och kör INSERT med den biten av datan.

Att använda förberedda satser kommer att minska kostnaden för att bygga frågan, helt enkelt skicka ny data till databasen vid varje iteration av slingan.

$query = mysqli_prepare("INSERT INTO `MyTable` (`col1`,`col2`,`col3`)
    VALUES(?,?,?)");

foreach($JSON_data as $key => $value) {
    $query->bind_param('sss',$value["prop1"],$value["prop2"],$value["prop3"];
    $query->execute();
}

Observera att det första argumentet till bind_param() talar om hur många värden du kommer att binda, samt typen för varje värde.
s motsvarar strängdata, i motsvarar heltalsdata, d motsvarar dubbel (flytande komma) och b motsvarar binär data.

Ett annat varningens ord, gör INTE citera alla strängdata, som s datatype säger åt mysql att förvänta sig en sträng. Om du citerar ? i det förberedda uttalandet kommer det att berätta för dig att antalet params är fel. Om du citerar strängarna kommer det att citeras i mysql.

EDIT:

Om du vill använda samma paradigm (infoga flera rader med en fråga), finns det sätt att göra det. Ett sätt är att skapa en klass som aggregerar bind_param anropar och gör en bind_param när du kör frågan. Koden för det finns här .



  1. Vilka är BIN$...-tabellerna i Oracles ALL_TAB_COLUMNS-tabell?

  2. MySQL till SQL Server-migrering

  3. Välj från flera bord utan anslutning?

  4. Analysera CSV och exportera till Mysql-databas i Grails