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

Lavorare con i puntatori di file su un csv

  1. È fgets() il migliore da usare per questo? È un bel modo per farlo. Un'altra opzione è leggere l'intero file in un array con file() , quindi scorrere l'array con foreach() .

  2. Devo incorporare una richiamata? No. Basta eseguire la query dopo aver letto ogni batch di righe dal file.

  3. Da dove cominciare? Quando il contatore raggiunge la dimensione batch, eseguire la query. Quindi reimposta il contatore su 0 e reimpostare la stringa di query sul valore iniziale. Infine, alla fine del ciclo dovrai eseguire la query con i valori rimanenti (a meno che la dimensione del file non sia un multiplo esatto della dimensione del batch, nel qual caso non rimarrà nulla).

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