Mailinglisten-Archive |
Stefan wrote: mit phpMyAdmin erstelle ich eine CSV datei, terminated by ;. So, manche records gehen aber uber mehrere Zeilen, aber ich kann nirgends lines terminated by einstellen. Wie laute der korrekte sql befehl load data fur diese records. Mit load data infile 'file..' into table test fields terminated by ';'; spielt er verruckt, wenn ein record uber mehrere Zeilen geht, kann mir einer helfen?? Hi Stefan, Die Datenfelder werden beim phpmyadmin einfach so uebernommen, wie sie in der Datenbank gespeichert wurden. Wenn du jetzt die erzeugte CSV-Datei importierst, werden alle \n \r und Semikolons ; intepretiert. Das fuehrt zwangslaeufig zu Fehlern. Deshalb habe ich phpAdmin einfach umgeschrieben. ;-)) Es dauert zwar dadurch etwas laenger, dafuer werden die Daten aber immer richtig interpretiert. Hier der Patch: 1. Oeffne die Datei lib.inc.php3. 2. Suche die Funktion get_table_csv oder gehe auf Zeile 300. Dort findest du folgenden for construct: <----- schnipp for ($j=0; $j<mysql_num_fields($result);$j++) { if (!isset($row[$j])) { $schema_insert .= "NULL".$sep; } elseif ($row[$j] != "") { $schema_insert .= "$row[$j]".$sep; } else { $schema_insert .= "".$sep; } } schnipp ---> 3. Aendere das Ganze folgendermassen: for ($j=0; $j<mysql_num_fields($result);$j++) { if (!isset($row[$j])) { $schema_insert .= "NULL".$sep; } elseif ($row[$j] != "") { $hvar = $row[$j]; // NEU $hvar = ereg_replace("\n","\\n", $hvar); // NEU $hvar = ereg_replace("\r","\\r", $hvar); // NEU $hvar = ereg_replace(";","\;", $hvar); // NEU $schema_insert .= "$hvar".$sep; // NEU } else { $schema_insert .= "".$sep; } } 4. Den ganzen Mist abspeichern, dann laeufts. Die ereg_replace - Funktionen kann man sicher noch eindampfen, aber so ists uebersicht- licher. Gruss Wolfgang -- ** Durchgehend geoffnet: http://www.php-center.de ** Die PHP-Liste: mailto:php_(at)_php-center.de http://infosoc.uni-koeln.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive