phpbar.de logo

Mailinglisten-Archive

[php] (no subject)

[php] (no subject)

Wolfgang wbh_(at)_euta.net
Tue, 4 Jul 2000 15:59:57 +0200


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