重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

■質問内容:
超初心者です。質問が的外れかもしれませんが自己解決できずにいます。何卒ご教授ください。
達成したい内容は
「PHPでCSVの内容をMySQLで既に作成されたテーブルへ登録したい」というものです。
ネットや書籍でCSVを読み込む方法や、テキストファイルを読み込む方法など試行してみましたが上手くいきません。

■環境:
php:ver5.2.6
MySQL:ver4.0.24
ホスティングサーバはロリポップです。

■状況と経緯:
ソースを交え直接的なご指摘いただけると、大変ありがたいです。
【aaa.csv】
091010-01,TO_001,'【内装】','ドアの取り付け'
091011-02,TO_002,'【外装】','タイル拭きつけ'
・・・・・
のようにカンマ区切りの4つの項目があります。
これを、PHPを介して、

MySQL/DB/
TABLE:
day|ver|module|naiyou (|は区切り)
4つのフィールドへ上記のCSVファイルの左から順に格納したいのです。

○結果的に、
day|ver|module|naiyou(|は区切り)
091010-01|TO_001|'【内装】'|'ドアの取り付け'
091011-02|TO_002|'【外装】'|'タイル拭きつけ'
・・・のようにしたいです。
--以上--

上記について教えてください。
出来れば具体的な記述でご指摘いただけるか参考サイトをご紹介
下さるとありがたいです。
何卒、宜しくお願いいたします。

A 回答 (3件)

そもそもPHPからMySQLへのアクセス方法がわからないという質問に見え


すでに質問の内容が元ネタからはなれている感がありますが
流れ的にはこんな感じで。
<?
$host='localhost';
$user='root';
$passwd='hogehoge';
$db='mydb';
$link=mysql_connect($host,$user,$passwd);
mysql_select_db($db,$link);
$sql="・・・";
$res=mysql_query($sql,$link) or die("error:".mysql_error());
?>
    • good
    • 0
この回答へのお礼

ありがとうございました。
できました!!
助かりました。

お礼日時:2009/10/29 14:40

>で、$splの内容(aaa.csv)が表示される状態です。



っというのは

INSERT INTO `table` (`day`,`ver`,`module`,`naiyou`) VALUES('091010-01','TO_001','\'【内装】\'','\'ドアの取り付け\''), ('091011-02','TO_002','\'【外装】\'','\'タイル拭きつけ\'')

が表示されるということでよろしいですか?
(それとも単にcsvのデータが表示されるだけ?)
あとはmysqlへデータを投げるだけです。

http://www.php.net/manual/ja/book.mysql.php

この回答への補足

URLを参考に、また違うサンプルなどwebで探しテストしてみましたが、
MySQL登録にいたっておりません。
引き続きお解りでしたら、教えていただけると助かります。

補足日時:2009/10/28 14:40
    • good
    • 0
この回答へのお礼

再び、ご回答頂きありがとうございます。

>が表示されるということでよろしいですか?
はい。その通りです。

>あとはmysqlへデータを投げるだけです。
参考のURLを見ています。
現在のところ、自己解決に至っておりませんがもう少し粘ってみたいと思います。

お礼日時:2009/10/28 09:58

いくつかやり方はあると思いますが、はしょって書くとこんな感じ



<?
$fname="aaa.csv";
$fp=fopen($fname,"r");
$count=0;
$sql="";
while (($data = fgetcsv($fp, 1024, ",")) !== FALSE) {
$str="";
foreach($data as $val){
if($str!="") $str.=",";
$str.="'".addslashes($val)."'";
}
if($sql!="") $sql.=",";
$sql.="({$str})";
}
$sql="INSERT INTO `table` (`day`,`ver`,`module`,`naiyou`) VALUES".$sql;
print $sql;
?>

セキュリティなどのことを考えるともう少しきちんとエスケープ処理を
入れた方がいいですが、フローをみるだけならこれでわかると思います。
    • good
    • 0
この回答へのお礼

早速のご回答を頂き、ありがとうございます。
教えていただいた方法を試して見ましたが上手く行きませんでした。
私の理解不足が大きいのですが、

$sql="INSERT INTO `table` (`day`,`ver`,`module`,`naiyou`) VALUES".$sql;
print $sql;
?>

で、$splの内容(aaa.csv)が表示される状態です。
勘違いなどご指摘いただけるとありがたいです。

お礼日時:2009/10/27 17:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!