MYSQLからCSVへの書き込み方法
MYSQLからCSVへの書き込み方法で質問があります。
下記のコードを記載しましたが
DBのデータ件数分の改行しか出力されませんでした。
ブラウザ上でecho動作させた際には、
echo "<p>CSVファイルにセットされるデータ:".$string;
でしっかりデータが設定されていました
何が悪いですか?
//////////////////////////////////////////////////////////////////
// DBからCSVファイル書き込み(全件新規)
// $file_name:csvファイル名
//////////////////////////////////////////////////////////////////
function DB_csvSet($file_name, $dbhost=DBHOST, $dbuser=DBUSER, $dbpass=DBPASS, $dbname=DBNAME) {
print "DB_csvSet start";
// MySQL 接続
if (!($cn = mysql_connect($dbhost, $dbuser, $dbpass))) {
die("DB_csvSet Error: mysql_connect");
}
//MySQLのクライアントの文字コードをsjisに設定
mysql_query("SET NAMES sjis") or die("can not SET NAMES sjis");
// MySQL DB 選択
if (!(mysql_select_db($dbname))) {
die("DB_csvSet Error: mysql_select_db");
}
// MySQL 問い合わせ
$sql = sprintf("select * from %s", TABLE_NAME);
if (!($rs = mysql_query($sql))) {
die("DB_csvSet Error: mysql_query");
}
// ファイルを新規モードで開く
$file = fopen($file_name, "w") or die("OPENエラー $file_name");
// ファイルをロックする
flock($file, LOCK_EX);
// MySQL レコード参照
while ($item = mysql_fetch_array($rs)) {
printf("id=%s ", $item[ITEM_ID]);
printf("name=%s ", $item[ITEM_NAME]);
printf("point=%s<BR> ", $item[ITEM_POINT]);
// 3つの変数から配列を作成する
$array = compact($item[ITEM_ID], $item[ITEM_NAME], $item[ITEM_POINT]);
// $array = compact("id","name","point");
// 配列のデータをカンマで区切って結合する
$string = implode(",", $array);
// 結合された文字列を表示する
echo "<p>CSVファイルにセットされるデータ:".$string;
// データを書き込む
fputs($file, $string."\n");
}
// ロックを解除する
flock($file, LOCK_UN);
// ファイルを閉じる
fclose($file);
// MySQL 切断
mysql_close($cn);
// 正常終了
print "正常終了";
}
お礼
masa6272さま アドバイスありがとうございます。 また返答が遅れましてすみません。 先ほど、下記のsql文を追加して試したところ、問題なく読み込むことが出来ました。 ありがとうございました! FIELDS TERMINATED BY ',' LINES STARTING BY 'xxx';