sql >> Base de Datos >  >> RDS >> Mysql

Trabajando con punteros de archivo en un csv

  1. Es fgets() lo mejor para usar para esto? Es una buena manera de hacerlo. Otra opción es leer el archivo completo en una matriz con file() , luego recorra la matriz con foreach() .

  2. ¿Necesito incorporar una devolución de llamada? No. Simplemente realice la consulta después de leer cada lote de líneas del archivo.

  3. ¿Por dónde empezar? Cuando el contador alcance el tamaño del lote, realice la consulta. Luego vuelve a poner el contador en 0 y establezca la cadena de consulta en el valor inicial. Finalmente, al final del bucle, deberá realizar la consulta con los valores restantes (a menos que el tamaño del archivo sea un múltiplo exacto del tamaño del lote, en cuyo caso no quedará nada).

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