• 締切済み

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 "正常終了"; }

noname#148793
noname#148793
  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

>// 結合された文字列を表示する >echo "<p>CSVファイルにセットされるデータ:".$string; > >// データを書き込む >fputs($file, $string."\n"); この記述で、(1)表示はOKだがファイルには書き込まれていない(2)ファイルには改行(\n)は処理した件数分落ちている。となると「$string」のtypoくらいしか考えられませんね。上記のソースは同じ変数名ですが、実際に動作しているスクリプトはどうですか?

noname#148793
質問者

お礼

すみませんうそを書いていました。 $stringにNULLが書き込まれていたため、改行のみ出力されていました。 下記のように変更して対応しました。 // 3つの変数から配列を作成する // $array = compact($item[ITEM_ID], $item[ITEM_NAME], $item[ITEM_POINT]); $id=$item[ITEM_ID]; $name=$item[ITEM_NAME]; $point=$item[ITEM_POINT]; $array = compact("id","name","point");

関連するQ&A

  • FC4でmysqlを使用して PEAR DB への接続ができない

    FC4に、yumでPHP5.0.4、php-pear-5.0.4、php-mysql-5.0.4、(mysql-4.1.20,mysql-server-4.1.20)をインストールしました。 <?php $con = mysql_connect("localhost","taro","password") or die("接続出来ません"); print "接続しました"; mysql_close($con); ?> を実行すると、「接続しました」と出ます。ところが、 <HTML> <HEAD><TITLE>PHP test</TITLE></HEAD> <BODY> <?php require_once("DB.php"); $dbUser="taro"; $dbPass="password"; $dbHost="localhost"; $dbName="testdb"; $dbType="mysql"; $dsn="$dbType://$dbUser:$dbPass:@$dbHost/$dbName"; $conn = DB::connect($dsn); if(DB::isError($conn)){ die($conn->getMessage()); } print ('DBに接続しました'); $conn->disconnect(); ?> </BODY></HTML> を実行すると、DB Error: connect failed と出て、接続できません。 php.iniは、 include_path = ".:/usr/share/pear:/php/includes" としてあり、 [root@FC4 ~]# ls -l /usr/share/pear/ で調べても drwxr-xr-x 2 root root 4096 5月 27 18:06 DB -rw-r--r-- 1 root root 38937 11月 8 2005 DB.php となっています。 パスの切り方が間違っているでしょうか? どのようにすれば接続できるでしょうか?よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • CSVからMYSQLに追加するとエラーになる

    お世話様です。 PHPでCSVFILEを読み込んで MYSQLにデータを追加する処理を 作成していますが、エラーでアブエンド してしまいます。 落ちる場所は実行するたびに変わります。 CSVの内容は120,000件くらいの 郵便番号のデータです。 試しに10,000件くらいのデータで 実行するとノーマルエンドします。 エラーメッセージは以下です。 Fatal error: Maximum execution time of 30 seconds exceeded (ソース) (1) require "dbfunc.php"; if (!($fil = fopen("zipno.csv","r"))) { die("ファイルが開けません。"); exit; } $objins = new sql_class; $objins -> dbconnect(); while (!feof($fil)) { $csvwk = fgets($fil, 1024); $csvtb = explode(",",$csvwk); for($i=0; $i<4; $i++){ $csvtbnew[$i] = str_replace('"', '', $csvtb[$i]); } $inssql = ""; $inssql .= "insert into ziptb (zipno,kenname,shiname,choname) "; $inssql .= " values('$csvtbnew[0]','$csvtbnew[1]','$csvtbnew[2]','$csvtbnew[3]')"; $objins -> tbins($inssql); } $objins -> dbclose(); //ファイルを閉じる fclose ($fil) ; (2)クラス class sql_class { var $con; var $dbsv; var $uid; var $dbpass; var $dbname; function sql_class () { $this -> dbsv = 'localhost'; $this -> uid = 'root'; $this -> dbpass = ''; $this -> dbname = 'magicwb'; } function dbconnect() { $this -> con = mysql_connect($this -> dbsv,$this -> uid,$this -> dbpass); if (!$this -> con) { die("MySQLの接続に失敗しました。"); } mysql_select_db($this -> dbname,$this -> con); } function tbins($inssql = "") { mysql_query($inssql,$this -> con); } function dbclose() { mysql_close($this -> con); } } 初心者ですので、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • phpとデータベース

    書籍のサンプルを実行しても表示されません pearのインストールが怪しいですが、どこを直せばいいかわかりません。 ご教授お願いいたします。 <HTML> <HEAD> <TITLE>PHPのテスト</TITLE> </HEAD> <BODY> <?php require_once("DB.php"); $dbUser = "sample"; // ユーザー名 $dbPass = "password"; // パスワード $dbHost = "localhost"; // ホスト名 $dbName = "sampledb"; // データベース名 $dbType = "mysql"; // データベースの種類 // MySQL="mysql", PostgreSQL="pgsql", MS SQL-Server="mssql", ODBC="odbc" などを設定 // 接続文字列の作成 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; // データベースに接続 $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)){ die($conn->getMessage()); } print('接続に成功しました。'); // データベースから切断します。 $conn->disconnect(); ?> </BODY> </HTML>

  • phpでのmysqlからjsonファイルの変換

    <? php   include("mysql2json.class.php");   //MySQL接続設定 define("DBSV", "PHPSRV"); define("DBNAME", "koukin"); define("DBUSER", "root"); define("DBPASS", "");   //MySQL接続 $conn = mysql_connect(DBSV, DBUSER, DBPASS) or die(); mysql_query("SET NAMES utf8",$conn); mysql_select_db(DBNAME, $conn);   //SQLクエリの発行 $num=0; $sql = "SELECT * FROM komento"; $result = mysql_query($sql, $conn); $num=mysql_affected_rows();   // クラスを呼び出して出力 $objJSON=new mysql2json(); print(trim($objJSON->getJSON($result,$num)));   ?> というプログラムをあるサイトを参考にさせてもらってしようさせてもらっているのですが、なぜか実行すると、getJSON($result,$num))); ?>としか出力されません。 どうしてでしょうか?

    • ベストアンサー
    • PHP
  • php ログインフォーム作成

    サーバーはさくらインターネットのプレミアムプラン phpのバージョンは 5.2.12 データベースのバージョンはMySQL 5.1 です。 <?php //DB設定 $dbhost = 'mysql***.db.sakura.ne.jp'; $dbuser = 'test'; $dbpass = 'test'; $dbname = 'members'; $ok_flg = 0; $msg = ""; //DB接続 $link = mysql_connect($dbhost,$dbuser,$dbpass); //使用するDBを選択 $conn = mysql_select_db($dbname,$link); if (!$conn) { die('Connect Error (' . mysql_connect_errno() . ') ' . mysql_connect_error()); } if (count($_POST) != 0) { $sql = sprintf("SELECT * FROM member WHERE id=? AND password=?"); $result = mysql_query($sql); ---- この先がわかりません ---- ***************************************** ***************************************** ***************************************** ---- ここまでがわかりません ---- if ($count == 1) { $ok_flg = 1; } else { $msg = '<span style="color:#ff0000;">ユーザーIDまたはパスワードが違います。</span>'; } } if ($ok_flg == 0) { echo <<< EOL $msg <form method="post" action=""> ユーザーID: <input name="id" /> パスワード: <input name="password" type="password" /> <input type="submit" value="ログイン" /> </form> EOL; } else { session_start(); $_SESSION["login_flg"] = 1; header ("location: ./"); } // MySQLへの接続を閉じる mysql_close($link); ?> ********の場所で困っています。 この先はどのように記述したらよろしいでしょうか? お分かりの方がいらっしゃいましたらご教授いただければと思います。

    • ベストアンサー
    • PHP
  • XserverでpearのDBでMySQLに接続

    xserver(レンタルサーバー)でPHPでpearのDBクラスを使ってMySQL(データベース)に接続ができません。 Xserver(レンタルサーバー)環境 MySQL5 バージョン:5.0.77 MySQL5 ホスト名:xxx.xserver.jp(仮名) PHP Version 5.3.3 include_path .:/usr/share/php53/pear :/usr/share/php Xserver PHP関連の仕様一覧 PEARインストール済み <インストール済みライブラリ> ・Archive_Tar ・Auth ・Console_Getopt ・DB ・HTML_Common ・HTML_QuickForm ・HTTP ・HTTP_Header ・HTTP_Download ・Mail ・Net_SMTP ・Net_Socket ・Pager ・PEAR ・XML_Parser ・XML_RPC ・Structures_Grap データベースは同じくXserverに設置されているphpmyadmin(MySQL5)で作成しました。 /xxx.xsrv.jp/public_html/php_sample/Section63 の中に(dbtest2.php) でおいています。 ★以下のコードで接続ができません。 どこが間違っているのか教えて下さい。 ↓ <?php require_once("DB.php"); $dbUser = "sample"; // ユーザー名(仮名) $dbPass = "password"; // パスワード(仮名) $dbHost = "xxx.xserver.jp"; // ホスト名(仮名) $dbName = "sampledb"; // データベース名(仮名) $dbType = "mysql"; // データベースの種類 $dsn = "$dbType://$dbUser:$dbPass@$dbHost/$dbName"; $conn = DB::connect($dsn); // 接続に失敗したらメッセージを表示して終了します。 if (DB::isError($conn)) { die($conn->getMessage()); } print('接続に成功しました。'); // データベースから切断します。 $conn->disconnect(); ?> ★ちなみにPHPのmysql_connect関数からは接続成功しました。 ↓ <?php $con = mysql_connect("xxx.xserver.jp", "sample", "password") or die("接続できません。"); print "接続に成功しました。"; mysql_close($con); ?>

    • ベストアンサー
    • PHP
  • csvからmySQLのデータベース作成

    カンマ区切りのcsvファイルを読み込んでMySQLのデータベースを作成したくて、下記のプログラムを作成しました。 しかし、正常に動作しません。どこに問題があるのでしょうか。 よろしくお願いします。 <?php $file = '"test.txt"'; //------------------------------------------------------------- //データベースアクセス //------------------------------------------------------------- $url = 'test-test.com'; // MySQL hostname $user = 'test_user'; // Your MySQL user name. $pass = 'password'; // Your MySQL password. $db = 'test_db'; // MySQLへ接続する $link = mysql_connect($url,$user,$pass); if ( $link == FALSE ) { error(__line__); } // データベースを選択する $sdb = mysql_select_db($db,$link); if ( $sdb == FALSE ) { error(__line__); } mysql_query("SET NAMES utf8"); //CSVデータの取り込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE test fields terminated by"; $sql .= " LINES "; $sql .= " TERMINATED BY '\r\n' "; $sql .= " IGNORE 1 LINES"; $result = mysql_query($sql, $conn); if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $sql; die($message); } //------------------------------------------------------------- // エラーメッセージ表示 //------------------------------------------------------------- function error($line) { echo "error code:" . $line; exit; } ?> ---------- .CSVファイル ---------- 日付,内容,備考 0901,value,etc 0902,value2,etc2

    • ベストアンサー
    • PHP
  • テーブル<TR></TR>の処理について

    次の様な処理を行いたいのですが方法をご教授下さい。 DBのテーブルに10個のレコードがあります。 すべてのレコードの情報を表示させます。 HTMLのテーブルは2列5行で表示させたい。 つまりHTMLで下記のように表示したい。 <TABLE> <TR> <TD>データ1</TD> <TD>データ2</TD> <TD>データ3</TD> <TD>データ4</TD> <TD>データ5</TD> </TR> <TR> <TD>データ6</TD> <TD>データ7</TD> <TD>データ8</TD> <TD>データ9</TD> <TD>データ10</TD> </TR> </TABLE> これをPHPで <? $con = mysql_connect("$dbhost", "$dbuser", "$dbpass"); mysql_select_db("$dbname"); $sql= "select * from DB_name"; $rs=mysql_query($sql); ?> <TABLE> <TR> <? while($row=mysql_fetch_array($rs)){ ?> <td><? echo $row['data'] ?></td> <?}?> </tr> </table> のように単純にデータを取り出すことは出来るのですが、 データを5つ毎に</TR><TR>を出す方法が分かりません。 このような処理は皆様はどのように行っていますか。 基本的な質問で申し訳ありませんが、ご教授下さい。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • MySQLで連続csvファイルを読み込むために

    MySQL 5.6を最近使い始めました。 大量のcsvファイルで保存されているデータを読み込んで、データベースとして扱いたいのですが、どうすれば良いでしょうか? ファイル名は、 data1_1.csv data1_2.csv data1_3.csv data2_1.csv data2_2.csv といった形で、規則正しく並んでいるのですが、大量にあるため、ループを使って自動化したいと思っております。そのために、LOAD DATA INFILE ファイル名 を使って、このファイル名を順次変えて繰り返す方法がわかりません。 まず、ファイル名に変数が使えるのかと思って @file="data1_1.csv"としてファイル名を置き換えてみたのですが、エラーでした。これでは、この1_1を順次動かす以前に変数が無理なのかも?と思っています。 何かやり方があるようでしたら、どなたかお教えください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • PHPでCSVファイルをUTF8に変換したい

    ブラウザからCSVファイルをアップロードし、MySQLのデータベースにインポートするプログラムをPHPで作成しています。 エクセルで作成したCSVファイルはsjis形式のため、UTF8に変換してからMySQLにインポートしてあげると文字化けせずにインポートする事が出来るのですが、毎回手動でUTF8に変換するのは面倒ですのでファイルをアップロードしたタイミングで自動的にsjis形式からUTF8に変換したいと考えております。 ファイルのアップロードまでは動作していますが、CSVファイルをsjisからUTF-8に変換するにはどうすればよいでしょうか? どなたかご教示いただければ幸いです。以下は作成中のコードです。 index.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>sample</title> </head> <body> <form action="read.php" method="POST" enctype="multipart/form-data"> ファイル:<br> <input type="file" name="upfile" size="30"><br> <br> <input type="submit" value="アップロード"> </form> </body> </html> read.php <?php //csvファイルのアップロード if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {     //「files」という名前のフォルダを同じ階層に設置。ここにCSVファイルをアップロード if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); //fileパス $file = "files/" .$_FILES["upfile"]["name"]; //DB接続 $sv = "localhost"; $dbname = "shop"; $user = "user"; $pass = "password"; $conn = mysql_connect($sv, $user, $pass) or die("コネクトエラー"); mysql_select_db($dbname) or die("DBセレクトエラー"); mysql_query("SET NAMES utf8"); //CSVデータの取り込み $sql = "LOAD DATA LOCAL INFILE '$file' INTO TABLE food"; $sql .= " FIELDS"; $sql .= " TERMINATED BY ',' "; //TERMINATED BY 区切り文字 $sql .= " ENCLOSED BY '\"' "; //ENCLOSED BY 囲み文字 $sql .= " LINES TERMINATED BY '\r\n' "; $sql .= " IGNORE 1 LINES"; $result = mysql_query($sql, $conn); if (!$result) { $message = 'Invalid query: ' . mysql_error() . "\n"; $message .= 'Whole query: ' . $sql; die($message); } echo "インポートが完了しました!"; //失敗したとき } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?> CSVファイル "No","food","price" "1","うどん","100" "2","カレー","300" "3","パスタ","500" MySQLテーブル CREATE TABLE IF NOT EXISTS `food` ( `No` int(11) NOT NULL, `food` varchar(50) NOT NULL, `price` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 使用中のバージョン PHP/5.4.19 Apache/2.4.4 XAMPP v3.2.1 素人の質問で凝縮ですが、よろしくお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう