2011-01-24 22 views
2

私はmysql_queryコマンドで次のように使用している場合:PHP MySQLのOUTFILEコマンド

SELECT * 
FROM mytable 
INTO OUTFILE '/tmp/mytable.csv' 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\n'; 
  • tmpファイル相対に、何らかの形でMySQLデータベースにまたはPHPファイルにありますか?
  • 存在しない場合は作成されますか?
  • それを行うPHPファイルから1つ上のフォルダを表示したい場合、どうすればよいですか?
+0

パスを書いた方法は、相対パスではありません「../mytable.csv」。 – walkingTarget

答えて

1

はどこにtmpファイルの相対ですか?

A:それが作成されますが存在しない場合は、ファイルがmytableは

SELECT * FROMの結果を持っているのだろうか?

A:はい

私はどのように私はそれを行うだろう、それはそれをしないのphpファイルから1フォルダまでを表示させたい場合は?

A:あなたは、そのようなパスを作るまでfileYouAreRunning.phpから一つのフォルダをしたい場合:

0

現在のクエリには絶対パスがあります。したがって、アウトファイルは相対的なものではなく、/tmp/mytable.csvに保存されます。

絶対パスを使用し続けるのが最も安全な方法だと思いますので、親の絶対パスが何であるかをPHPでチェックし、変数を使ってクエリに追加してください。 The Documentation On Selectによると、それはクライアント上のサーバーといないに保存されている

3

SELECT ... SELECTのINTO OUTFILE「file_nameに」形式は、ファイルに選択された行を書き込みます。ファイルはサーバホスト上にで作成されるため、この構文を使用するFILE権限が必要です。 file_nameは既存のファイルではありません。特に、/ etc/passwdやデータベーステーブルなどのファイルが破壊されるのを防ぎます。 MySQL 5.0.19以降、character_set_filesystemシステム変数はファイル名の解釈を制御します。

そして、ポイントより:OUTFILE文のINTO

SELECT ...は、あなたは非常に迅速に、サーバー・マシン上のテキストファイルにテーブルをダンプできるように主に意図されます。サーバーホスト以外のホストで結果ファイルを作成する場合は、通常、サーバーホストのファイルシステムを基準にファイルへのパスを書き込む方法がないため、SELECT ... INTO OUTFILEは使用できません。

したがって、CSVファイルを生成するために本番環境では使用しないでください。代わりに、fputcsvを使用してPHPでCSVを構築:

$result = $mysqli->query($sql); 
if (!$result) { 
    //SQL Error 
} 
$f = fopen('mycsv.csv', 'w'); 
if (!$f) { 
    // Could not open file! 
} 
while ($row = $result->fetch_assoc()) { 
    fputcsv($f, $row); 
} 
fclose($f); 
関連する問題