Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Arbeiten mit Dateizeigern in einer CSV-Datei

  1. Ist fgets() am besten dafür verwenden? Es ist eine gute Art, es zu tun. Eine andere Möglichkeit besteht darin, die gesamte Datei mit file() in ein Array einzulesen , und durchlaufen Sie dann das Array mit foreach() .

  2. Muss ich einen Rückruf einbauen? Nein. Führen Sie die Abfrage einfach aus, nachdem Sie alle Zeilen aus der Datei gelesen haben.

  3. Wo anfangen? Wenn der Zähler die Stapelgröße erreicht, führen Sie die Abfrage aus. Setzen Sie dann den Zähler wieder auf 0 und setzen Sie die Abfragezeichenfolge auf den Anfangswert zurück. Schließlich müssen Sie am Ende der Schleife die Abfrage mit den verbleibenden Werten durchführen (es sei denn, die Dateigröße war ein genaues Vielfaches der Stapelgröße, in diesem Fall bleibt nichts übrig).

$batch_size = 100;
$counter = 0;

//instead of executing query one by one,
//let us prepare 1 SQL query that will insert all values from the batch

$sql_prefix ="INSERT INTO workorderstest(id,parentid,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10) VALUES ";
$values = "";

while (($line = fgets($handle)) !== false) {
    $values .= "($line),";
    $counter++;
    if ($counter == $batch_size) {
        $values = substr($values, 0, strlen($values) - 1);
        $conn->query($sql_prefix . $values) or die($conn->error);
        $counter = 0;
        $values ="";
    }
}
if ($counter > 0) { // Execute the last batch
    $values = substr($values, 0, strlen($values) - 1);
    $conn->query($sql_prefix . $values) or die($conn->error);
}