Mailinglisten-Archive |
Michael Schmitz wrote: > $result=mysql_query("SELECT * FROM Kurse INTO OUTFILE 'Tester.txt'"); > > Aber es passiert nichts, es wird keine Fehlermeldung ausgegeben oder irgend eine andere Meldung. Hallo Micheal, zur Ausführung dieser select Variante muß der Datenbankadministrator Dir entsprechende Recht erteilt haben (file privilige). Bitte erkundige Dich bei deinem Provider, ob dies der Fall ist. Stelle weiterhin sicher, daß die Datei die Du erstellen möchtest nicht bereits auf dem Server existiert. Sollte der Provider die notwendigen Rechte nicht erteilen, wirst Du die CSV-Datei "von Hand" erstellen müssen: $delimiter = ";"; $enclosedby = "'"; $outfile = ""; mysql_connect($host,$user,$password); $result = mysql_db_query("database","select * from kruse"); while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { reset($row); while (list(, $v)=each($row)) $outfile.=$enclosedby.$v.$enclosedby.$delimiter; $outfile.=substr($outfile, 0, -1)."\n"; } Beachte den zweiten Parameter bei mysql_fetch_array(). Wir mysql_fetch_array nur mit einem Parameter(*) aufgerufen, das zurückgelieferten Array numerisch und über Datenbankfeldnamen indiziert: $row = array ( 0 => "wert in feld1", "feld1" => "wert in feld1" ); Mit dem zweiten Parameter (MYSQL_NUM) kannst Du PHP anweisen, entweder nur eine numerische Indizierung vorzunehmen: $row = array ( 0 => "wert in feld1" ); Oder nur eine Indizierung über die Feldnamen in der Datenbank (MYSQL_ASSOC): $row = array ("feld1" => "wert in feld1"); Für unsere Anwendung ist es unerheblich welche Variante gewählt wird, wichtig ist, daß es zu keiner Ergebnisdoppelung in dem Array kommt, welches mysql_fetch_array() liefert. Ohne Doppelung können wir einfach alle Werte in einer Schleife ausgeben und eine Zeile einer typischen CSV-Datei aufbauen: reset($row); while (list(, $v)=each($row)) $outfile .= $enclosedby.$v.$enclosedby.$delimiter #$outline .= '$v'; Leider erhalten wir eine Zeile wie: 'wert in feld1';'wert in feld2'; Das Semikolion am Ende leitet eine weitere Spalte ein, obwohl keine Daten folgen. Damit beim Import keine dritte Spalte erkannt wird, muß es entfernt werden. Ein Zeilenumbruch komplettiert die Zeile: $outfile = substr($outfile, 0, -1)."\n"; Ulf (*) Ab PHP 3.0.7. Mein PHP 3.0.12 uffe Arbeit reagiert nicht auf MYSQL_NUM, MYSQL_ASSOC und MYSQL_BOTH, sondern 0,1 und 2. Ich weiß nicht ob dies ein Bug oder Feature ist.
php::bar PHP Wiki - Listenarchive