sql >> Databasteknik >  >> RDS >> Mysql

Arbeta med filpekare på en csv

  1. Är fgets() det bästa att använda för detta? Det är ett bra sätt att göra det på. Ett annat alternativ är att läsa in hela filen i en array med file() , sedan loopa över arrayen med foreach() .

  2. Behöver jag inkludera en återuppringning? Nej. Utför bara frågan efter att ha läst varje rad rader från filen.

  3. Var ska jag börja? När räknaren når batchstorleken utför du frågan. Ställ sedan tillbaka räknaren till 0 och ställ tillbaka frågesträngen till det ursprungliga värdet. Slutligen, i slutet av slingan måste du utföra frågan med de återstående värdena (såvida inte filstorleken var en exakt multipel av batchstorleken, i vilket fall det inte finns något kvar).

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


  1. MYSQL Välj fråga med SUM()

  2. Hur lagrar man .pdf-filer i MySQL som BLOB-filer med PHP?

  3. PDO mysql:Hur man vet om infogningen lyckades

  4. Java, MySQL:Finns det något sätt att bädda in en MySQL-server med ett Java-program?