In Pseudocode
Setze Prepare-Anweisung mit dem Prepared Statement und Platzhaltern ab
Solange es Datensätze gibt
Binde die Daten an die Platzhalter
Führe das Prepared Statement mit den gebundenen Daten aus
Ende Solange
Habe es nun hinbekommen. Ein paar strategisch platzierte & helfen :-)
$query = "INSERT INTO "
." table_name "
." ( "
." id, "
." FieldA, "
." FieldB, "
[...]
." FieldM "
." ) "
."VALUES "
." ( "
." '( ?)' "
." '( ?)' "
." '( ?)' "
[...]
." '( ?)' "
." ) ";
$params = array( &$A , &$B , &$C , [...] , &$M );
$stmt = sqlsrv_prepare( $this->DB_Connector , $query , $params );
$handle = fopen ( $this->datei_path.$this->datei_name , "r" );
$nr = '0';
while ( ! feof( $handle ) )
{
$nr++;
$zeile = fgets( $handle, '4096' );
//Leerzeilen abfangen
if ( strlen ( trim( $zeile ) ) > '0' )
{
$A = substr( $zeile , '0' , '8' );
$B = ltrim( substr( $zeile , '8' , '10' ) , '0' );
$C = ltrim( substr( $zeile , '18' , '12' ) , '0' );
$D = ltrim( substr( $zeile , '30' , '10' ) , '0' );
$E = ltrim( substr( $zeile , '40' , '12' ) , '0' );
$F = ltrim( substr( $zeile , '52' , '10' ) , '0' );
$G = strtr( ltrim( substr( $zeile , '62' , '15' ) , '0' ) , ',' , '.' );
$H = trim( substr( $zeile , '77' , ' 1' ) );
$I = rtrim( substr( $zeile , '79' , '9' ) , ' ' );
$J = trim( substr( $zeile , '88' , '10' ) );
$K = trim( substr( $zeile , '99' , '20' ) );
$L = trim( substr( $zeile , '120' , '8' ) );
$M = trim( substr( $zeile , '128' , '20' ) );
sqlsrv_execute( $stmt);
}
}
fclose ($handle);
-
A -
Mit 2.460 Zeilen 7 Sekunden, fgets(), prepared statement
Mit 6.844 Zeilen 19 Sekunden, fgets(), prepared statement -
B -
Mit 2.460 Zeilen 3 Sekunden, fgets(), 300erInserts
Mit 6.844 Zeilen 7 Sekunden, fgets(), 300erInserts -
C -
Mit 2.460 Zeilen 2 Sekunden, file(), 300erInserts
Mit 6.844 Zeilen 7 Sekunden, file(), 300erInserts
Werde dann wohl Variatne C wählen.
Vielen Dank an alle für die Hilfe und Vorschläge, speziell Vinzenz.
Gruß
Matthias