csvからmySQLのデータベース作成

このQ&Aのポイント
  • カンマ区切りのcsvファイルを読み込んでMySQLのデータベースを作成したくて、下記のプログラムを作成しました。
  • しかし、正常に動作しません。どこに問題があるのでしょうか。
  • よろしくお願いします。
回答を見る
  • ベストアンサー

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
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • oooioi
  • ベストアンサー率29% (16/55)
回答No.3

phpmyadminでインポートするのはダメなのか? load data local infileで直接インポートするのはダメなのか?

その他の回答 (2)

noname#244856
noname#244856
回答No.2

mysql_**関数はPHP5.5以降は非推奨とされており、さらにそれ以前のバージョンにおいてもPDOを使ったほうがメリットが大きいのでPDOで書くようにしましょう。以下のリンクを熟読してください。 http://qiita.com/mpyw/items/b00b72c5c95aac573b71 PDOの場合SQL実行に失敗した場合の対応がmysql_**関数を使う場合よりもはるかに簡単です。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

>INFILE '$file' するのがphpからの参照パスなので、MySQLから参照できないのでは? フルパス指定に変更してみては? CSVの読み込み処理は制限がいろいろあるので、PHPを介して処理するなら SQL形式に変換しながら読んだ方が確実だと思いますが・・・

関連するQ&A

  • mysql_select_db()関数に関して・・・。MySQLでテーブルの作成ができません。

    こんにちは、さくらインターネットのレンタルサーバでMySQLとphpを連動させたサイトを作っているのですが、初歩的なことでつまずいてしまい困っています。 まず、フォームで入力させたデータをPOSTで受け取り、その受け取ったデータをテーブル名として、データベース上にテーブルをつくりたいのですが、エラー文が表示されるだけでできません。 データベース自体への接続はできているようなのですが、phpMyAdminで見ても全くできていません。SQL文をphpMyAdminで実行するときちんと正常にテーブルができますので、そもそもデータベースが使用できないとか、もしくはSQL文の間違いでもなさそうです。 $t1 = $_POST['test1']; $t2 = $_POST['test2']; echo"{$t1}を受け取りました<br>"; $link = mysql_connect('mysql**.db.sakura.ne.jp', 'ユーザー名', 'パスワード'); if (!$link) { die('接続失敗です。'.mysql_error()); } print('接続に成功しました。<br>'); //1.さくらインターネット内にあるデータベースの選択 $db_name = "自分のデータベース名"; $selectDB = mysql_select_db($db_name,$link) or die("接続できません。"); //2.データベース内にテーブルを作成。 echo"{$t1}がテーブル名になります。<br>"; //3.テーブル作成用SQL文 $str_sql = "CREATE TABLE {$t1}" . "(" . "{$t2} INT(7) NOT NULL," . ");"; //4.上のSQL文を実行してテーブルを作る。 mysql_query($str_sql,$selectDB); echo"データベース内にテーブル「{$t1}」を作成しました。<br>"; //データベースへの接続を切断 $close_flag = mysql_close($link); if ($close_flag){ print('切断しました。<br>'); } 実行結果:Warning: mysql_query(): supplied argument is not a valid MySQL-Link resourceとなってテーブルは作成されず。 自分でも調べて見たところ、mysql_connect()での接続はちゃんとできているようなのですが、その次のmysql_select_db()関数がうまく働いていないようです。 つまりデータベースの選択ができていないので当然エラーとなるようです。 もう何日も悩んでいます。わかる方がいましたらどうぞよろしくお願いします。

    • ベストアンサー
    • PHP
  • CSVファイルをMYSQLにインポート

    先日からMYSQL+PHPの勉強をはじめました。 データベース構築の際、以前作成したCSVファイルをMYSQLのテーブルとして 利用したいと考えております。 そこで、MYSQLコマンドより、 LOAD DATA LOCAL INFILE 'ファイル名.csv' INTO TABLE テーブル名 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n'; Query OK, 0 rows affected (0.04 sec) Records: 102 Deleted: 0 Skipped: 102 Warnings: 0 とCSVファイル自体が悪いのかSQL文に問題がるのかインポートがうまくいきません。。 ちなみにCSVは  0,2011/6/2 0:00,80.94,81.32,80.55,80.92 0,2011/5/25 0:00,81.94,82.17,81.8,81.95 0,2011/5/23 0:00,81.77,82.04,81.32,81.99 環境はphpdevで一括でインストールした phpadmin: バージョン2.3.2 MYSQL: MySQL4 apache: 1.3.27 初心者で基本的な質問かもしれないですがどうかご教授お願いします。

    • ベストアンサー
    • MySQL
  • mySQLでINSERT Errorとなります。

    初心者です。よろしくお願いいたします。 データを入れたいのですが、エラーとなってしまいます。 以下でデータベースとテーブルを作成し、 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } $sql = 'CREATE DATABASE tori'; if (mysql_query($sql, $db)) { echo "データベースtori の作成に成功しました\n"; } else { echo 'データベースtoriの作成に失敗しました: ' . mysql_error() . "\n";} mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $query ="create table {$tbl_name} ( id char(8) primary key, date TEXT, sex TEXT, age TEXT )TYPE=MyISAM"; mysql_query($query); $query ="INSERT INTO `houzingpark`.`hatogaya` ( id , date , sex , iro ) VALUES ( '2', 'uu', 'ii', 'po' )"; mysql_close($db); ?> 以下で入れ込みたいのですが、出来ないのです。 <?php $db_name="tori"; $tbl_name = "hato"; $db = mysql_connect('localhost', 'root', ''); if (!$db) { die('接続できません: ' . mysql_error()); } mysql_select_db($db_name,$db) or die("データベースへの接続エラー"); $sql="INSERT INTO hatogaya ( id , date , sex , iro ) VALUES ( 3, 2005-12-3, mesu, cya )"; mysql_query($sql); if(!$result){print 'INSERT Error!';} echo $sql; mysql_close($db); ?> でINSERTしようとするのですが、INSERT Error!と表示されてしまいます。 Adminで見るとデータベースとテーブルは出来ているのですが、どうしてもINSERTできないのです。 もう何時間も悪戦苦闘しております。 どなたかご指導よろしくお願いいたします。

  • PHPからMySQLのデータベースが作成できない

    PHP:4.4.4 MySQL:4.1.21 です。 PHPからデータベースを作りたいのですがうまくいきません。 以下のように記述しています。 $sql = "CREATE DATABASE ".$DBNAME; $rst = mysql_query($sql,$con); $DBNAMEには作りたいデータベースの名前が入っています。また、$conにはIDが入っており接続はできているようです。しかしこの後で$rstをechoするとTRUEでもFALSEでもなく、何も入っていない状態です。 これはどうすればデータベースをcreateできるのでしょうか? 非推奨のようですがmysql_create_dbを使ってたところ画面が真っ白になってしまいました。

    • 締切済み
    • PHP
  • PHP/mySQLでインサートができません。

    PHPとmySQLを勉強中の初心者ですが、よろしくお願いします。 PHPで簡単なインサート文を作ってそれをmySQLに保存しようとしているのですが、以下のエラーが出てしまいます。 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource プログラムは以下の通りです。HOSTNAME,USERNAME,DBPWDは別のところで定義していますが、mysql_connect, mysql_select_dbではエラーにならないので、データベースの選択まではうまく行っていると思うのですが。 $conn = mysql_connect(HOSTNAME, USERNAME, DBPWD); if(!$conn){ die("Logon Failure to mysql Server."); } $db = mysql_select_db(DBNAME, $conn); if(!$db){ die("Cannot access to the DB"); } foreach($csv_ary as $a => $b) { $query = "INSERT INTO TEST field_a VALUES $a"; if (!mysql_query($query, $db)){ echo "更新失敗: SQL=$query<br>"; } } mysql_close($conn); field_aはvarchar(10)でPrimary_key, NOT NULLの設定です。 Foreachで展開した配列の値はちゃんと長さ10の文字列が入っています。 PHP 4.3.11は mySQL 4.0.27です。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • php mysqlについて

    初心者です宜しくお願いします。 phpからデータベースを使いたいのですが(mysql)、mysql_query()関数のところで1366エラーが出ます。 半角英数ならエラーは出ません。 プログラムを貼り付けます。どなたかお願いします、説明をもっと書きたいのですが私もあまりわかってないのでどうもすみません。 今やっていることは全てローカルですwindowsを使ってます、文字コードもshift_jisです。phpもmysqlも一台のコンピュータでやっています。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>MySQLへデータを登録</title> </head> <body> DBとの連携テスト結果<br> <?php // DBに接続 if(!$con=mysql_connect("localhost","root","y3kwyuba")){ echo"connect_error"; exit; } // DBを選択 if(!mysql_select_db("test",$con)){ echo"select_db_error"; exit; } //MySQL4.1への対応 //mysql_query("SET NAMES SJIS"); この上の行のコメントをはずすとうまく動くのですが色々調べましたら、この書き方は推奨されないと書いてありました、他に対策はあるのでしょうか? $name = $_POST['nm']; $age = $_POST['age']; // フォームで送られてきたデータでINSERT文を作成 $sql = "insert into t_touroku(name,age) values('$name',$age)"; // SQLを実行 if(!$res=mysql_query($sql,$con)){ echo"query_error"; echo "エラー番号:".mysql_errno(), #エラー番号 "メッセージ:".mysql_error(); #エラーメッセージ exit; } // DBから切断 mysql_close($con); // メッセージ出力 echo"登録完了"; ?> </body> </html> 宜しくお願いします。

    • ベストアンサー
    • PHP
  • phpでmysqlで作成したdbを表示したい。

    現在phpのプログラムの学習を行っています。、 phpmyadminで作成したデータベースを読み込もうとしているのですが、うまくいきません。 参考書やサイトも参考にしたのですが、警告が出ています。 よくわからなくなってきましたので、教えていただきたいです。 ------------------------------------------------------------------------------- ・実行結果 Resource id #31Resource id #40 接続ID: 選択の成否: 結果ID: 行数: Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\job\job.php on line 45 ------------------------------------------------------------------------------- ・ソース <?php /*$con = mysql_connect('localhost','root','root') or die("接続できません"); print "接続に成功しました。"; mysql_close($con);*/ $url = "localhost"; $user = "root"; $pass = "***"; $db = "***"; // MySQLへ接続する $link = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました。"); // データベースを選択する $sdb = mysql_select_db($db,$link) or die("データベースの選択に失敗しました。"); // クエリを送信する $sql = "SELECT * FROM t01prefecture"; $result = mysql_query($sql, $link) or die("クエリの送信に失敗しました。<br />SQL:".$sql); //結果セットの行数を取得する $rows = mysql_num_rows($result); //結果保持用メモリを開放する mysql_free_result($result); echo "$link"; echo "$sdb"; echo "$result"; echo "$rows"; echo "<br>"; echo "接続ID:<?= $link ?><br />"; echo "選択の成否:<?= $sdb ?><br />"; echo "結果ID:<?= $result ?><br />"; echo "行数:<?= $rows ?><br />"; $recordSet = mysql_query('SELECT * FROM my_items'); while($data = mysql_fetch_assoc($recordSet)){ /*このあたりが45行目 */ echo $data['item_name']; /* ここの値を変える*/ echo '<br>'; } // MySQLへの接続を閉じる mysql_close($link) or die("MySQL切断に失敗しました。");

    • ベストアンサー
    • PHP
  • MYSQLで読替え(SELECT~CASE)をし、CSVを作成したい

    MYSQLで読替え(SELECT~CASE)をし、CSVを作成したい MYSQLは4シリーズを、PHPは5を使用しています。 データベースの値をCSV出力しようとしておりまして、 下記のようなソースを書いています。 現在このソースで作成されるCSVは 日付|行先/要件|交通機関|往/復|証票|金額 2010/4/5|test| 1 | 1 | 2 | 14480 と、言った感じのものなのですが 交通費(USAGE)や往復(ROUND)、証票(CERTIFICATE) は取得できる数値によって読み替えを行いたいのです。 SELECT~CASE WHEN~END 文で実現できると考え、 phpmyadminで色々ためしているのですが エラー内容は常に #1064 - You have an error in your SQL syntax; で、 ASで項目名を変えている場合、 CASE読み変えはできないのかな等と考えています。 CSVを 日付|行先/要件|交通機関|往/復|証票|金額 2010/4/5|test| 1.電車 | 1.片道 | 2.無し | 14480 と、表示させるにはどう読み替えを行えばよいのでしょうか? 単純にSQL分のミスなのか、そもそもできない事をやろうとしているのか、 いきずまっています。 ---ソースここから--- <?php header("Content-Type: application/octet-stream"); ?> <?php header("Content-Disposition: attachment; filename=output.csv"); ?> <?php $csv_flg = 1; $doc_id = 1; //接続情報  $srv = "localhost";  $id = "aaa";  $passwd = "bbb";  $dbn = "ccc"; /* USAGE は0:未選択,1:電車,2:タクシー */ if($csv_flg == 1){ $sql = "SELECT `REC_DATE`as`日付`, `USAGE`as`行先/要件`, `LINE`as`交通機関`, `ROUND`as`往/復`, `CERTIFICATE`as`証票`, `COST`as`金額` FROM transportation WHERE SEISANSHO_ID = '".$doc_id."' ORDER BY LINE_NO "; $db=mysql_connect($srv,$id,$passwd); mysql_select_db($dbn,$db); $rs=mysql_query($sql,$db); for($i=0; $i<mysql_num_fields($rs); $i++){ print(mb_convert_encoding(mysql_field_name($rs,$i),"SJIS","UTF8").","); } print("\n"); for($j=0 ;$j<mysql_num_rows($rs); $j++) { for($k=0; $k<mysql_num_fields($rs); $k++) { $str=mysql_result($rs,$j,$k); print(mb_convert_encoding($str,"SJIS","UTF8").","); } print("\n"); } mysql_close($db); } ?>

    • ベストアンサー
    • MySQL
  • PHPでMysqlにCSVをインポートす文字化け

    お世話になります。 文字化けが解消できずに困っています。 PHPからローカルXAMPPのMYSQLにCSVでデータを上げたいのですが、日本語が文字化けして表示されます。秀丸テキストエディタで可能な限りのエンコードを試しましたが解決できず、サーバ側のエンコード設定も確認しましたがutf8_unicode_ciです。 Mysqlの管理画面のsqlから実行しても同様の結果です。 もう、色々やり過ぎてPHPが悪いのかMysqlサーバの設定なのかCSVの問題なのかわからず途方に暮れています。 諸先輩方でお分かりになられる方がいらっしゃいましたら是非、お知恵を貸してもらえませんか。 PHPのソースです。 ------------------------------ $host = "localhost"; $mysql_user = "root"; $mysql_password = "password"; $db = "utsun_db"; $cn = mysql_connect($host,$mysql_user,$mysql_password); if(!$cn){ die("db connect Error"); } if(!(mysql_select_db("$db"))){ die("db select error"); } $file = '"c:/tablea.csv"'; $sql = "LOAD DATA LOCAL INFILE $file INTO TABLE tablea FIELDS TERMINATED BY ',';"; $query = mysql_query($sql); mysql_close($cn); ----------------------------- CSVの中身 N551 佐々木 37 N552 伊藤 41 N553 斉藤 31 N554 井上 43 N555 阿倍 31 ----------------------------- Mysqlの方ではこのように表示されています N552 伊藤 41 N553 斉藤 31 N554 井上 43 N555 阿倍 31 ほんとうに困っております宜しくお願いします。 環境 Apache/2.4.3 (Win32) OpenSSL/1.0.1c PHP/5.4.7 phpMyAdmin バージョン情報: 3.5.2.2, 最終安定バージョン: 4.0.4.1

    • ベストアンサー
    • MySQL
  • PHPからMySQL CSVファイルのアップロード

    こんにちわ。 現在、XAMPP(1.6)にて開発をおこなっています。 MySQL Ver 5.0.51 PHP 5.2.5 Web上からcsvファイルを参照して、作成してあるDB(フィールド数32)へアップロードを おこないたいのですが、タイムアウトエラーになってしまいます。 アップするCSVファイルが54M(8万行)ほどあるため、php.ini「uplaod_max_file_size」 増やしてみたり、タイムアウト時間を長くしてみても、INSERTではタイムアウトになって しまいます。 そのため、LOADで読込もうとしたのですが以下のようなエラーになってしまいます。 PHP初めてで'や"の使い方が間違っているのかも知れませんが、どこが間違っているのか 教えていただけますでしょうか? ↓エラー文 Parse error: syntax error, unexpected T_VARIABLE in C:\xampp\htdocs\dmti.php on line 24 ↓実行文(24行目前後)$polはテーブル名 mysql_query("set names sjis"); $sql ="load data infile '$fl' into tabale $pol fields terminated by ',' enclosed by '"' lines terminated by '\r\n';" $ret = mysql_query($sql, $db); if($ret){ print mysql_num_rows($db)."件の登録を完了しました。.<br><br>"; $body = "<br><br> <input type='button' value='次へ' onclick='window.location=\"news.php\"'> <input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; }else{ print "登録に失敗しました。"; $body .= "<br><br> <input type='button' value='戻る' onclick='history.back()'> <input type='button' value='ホームへ戻る' onclick='window.location=\"index.htm\"'>"; } 以上、宜しくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう