解決済みのQ&A
PHPのスクリプトからCSVのデータを読み込んでMySQLの方にインポートしたいのですが...
PHPのスクリプトからCSVのデータを読み込んでMySQLの方にインポートしたいのですが、完成半ばでわからなくなりました。どなたかおわかりになる方がいたらアドバイスをお願いします。ちなみに、CSVのデータは
フィールドが7つあって複数行インポートしたいと思ってます。このコードで実行するとFOR文が間違ってるみたいです。よろしくお願いします。
<?php
//ファイルのアップロード
$updir = "/";
$filename = $_FILES['upfile']['name'];
if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE)
{
print($updir.$filename);
print("upload failed...");
print($_FILES['upfile']['error']);
}
else
{
print("<b>" . $filename . "</b> uploaded");
}
//DB
$host = "localhost";
if(!$con = mysql_connect($host, "root", "root"))
{
die("データベースエラー.<br />");
}
mysql_select_db("abccorp", $con);
//ファイルサイズ
$size = $_FILES['upfile']['size'];
$row = 0;
$data = array();
//CSVファイルの中身をすべて読み込む
$fp = fopen($updir.$filename, "r")
or die('ファイルをオープンできません');
while (($tmp = fgetcsv($fp, $size, ",")) !== FALSE)
{
$num = count($tmp);
$data[$row]["id"] = mb_convert_encoding($tmp[0],"UTF-8","SJIS");
$data[$row]["name"] = mb_convert_encoding($tmp[1],"UTF-8","SJIS");
$data[$row]["shurui"] = mb_convert_encoding($tmp[2],"UTF-8","SJIS");
$data[$row]["suryou"] = mb_convert_encoding($tmp[3],"UTF-8","SJIS");
$data[$row]["price"] = mb_convert_encoding($tmp[4],"UTF-8","SJIS");
$data[$row]["seizoubi"] = mb_convert_encoding($tmp[5],"UTF-8","SJIS");
$data[$row]["checkbi"] = mb_convert_encoding($tmp[6],"UTF-8","SJIS");
$row++;
}
fclose($fp);
for($i = 0; $i <= 1; $i++)
{
//SQL文の組み立て
$sql =
"INSERT INTO shouhin " .
"(id, name, shurui, suryou, price, seizoubi, checkbi)" .
" VALUES (" .
"'" . $data[i]["id"] . "'," .
"'" . $data[i]["name"] . "'," .
"'" . $data[i]["shurui"] . "'," .
"'" . $data[i]["suryou"] . "'," .
"'" . $data[i]["price"] . "'," .
"'" . $data[i]["seizoubi"] . "'," .
"'" . $data[i]["checkbi"] . "')";
mysql_query($sql, $con)
or die("変更できませんでした。");
print("登録しました");
}
?>
-
- 質問日時:
- 2008/2/26 00:24:34
-
- 解決日時:
- 2008/3/11 04:46:45
-
- 回答数:
- 2
-
- 閲覧数:
- 11,648
-
- ソーシャルブックマークへ投稿:
- Yahoo!ブックマークへ投稿
- はてなブックマークへ投稿
- (ソーシャルブックマークとは)
ベストアンサーに選ばれた回答
for($i = 0; $i <= 1; $i++) って2行限定にしているっていうのは?
for($i = 1; $i < $row; $i++) ってこと?
配列に入れなくても、そのままINSERTとしていけばよいのでは?
$data["id"] = mb_convert_encoding($tmp[0],"UTF-8","SJIS");
$data["name"] = mb_convert_encoding($tmp[1],"UTF-8","SJIS");
$data["shurui"] = mb_convert_encoding($tmp[2],"UTF-8","SJIS");
$data["suryou"] = mb_convert_encoding($tmp[3],"UTF-8","SJIS");
$data["price"] = mb_convert_encoding($tmp[4],"UTF-8","SJIS");
$data["seizoubi"] = mb_convert_encoding($tmp[5],"UTF-8","SJIS");
$data["checkbi"] = mb_convert_encoding($tmp[6],"UTF-8","SJIS");
//SQL文の組み立て
$sql =
"INSERT INTO shouhin " .
"(id, name, shurui, suryou, price, seizoubi, checkbi)" .
" VALUES (" .
"'" . $data["id"] . "'," .
"'" . $data["name"] . "'," .
"'" . $data["shurui"] . "'," .
"'" . $data["suryou"] . "'," .
"'" . $data["price"] . "'," .
"'" . $data["seizoubi"] . "'," .
"'" . $data["checkbi"] . "')";
INSERTするたびに「登録しました」っていうのも妙な気がしますし。
もっともその前に「SQLインジェクション」って単語を調べた方がいいでしょうけど。
とりあえずmysql_real_escape_stringすればいいのかな。
- 回答日時:2008/2/26 17:52:22
この質問は投票によってベストアンサーが選ばれました!
このQ&Aはまだナイス!されていません。
役に立ったと思った回答に、ナイス!してみよう!
ベストアンサー以外の回答
(1件中1〜1件)
ngsatsgさん
プログラムの回答ではありませんが、MySQLには直接CSVファイルをインポートする機能があります。
LOAD DATA INFILE [filename] INTO TABLE [tablename] FIELDS TERMINATED BY ",";
[filename]はCSVファイル名、[tablename]はインポートするテーブル名を適宜入力してください。
PHPでファイルのアップロードさえ出来れば、あとはサーバ上のフルパスを[filename]に入れてあげればインポートできるかと思います。
- 回答日時:2008/2/26 09:47:07
あなたにおすすめの解決済みの質問
- こんな例題を見つけたのですが一体どのようにして解けばよいのでしょうか?以下の文字列はutf-8を文字エ...
- perl+データべースでの文字コードについて (s-jisやutf-8)データベース(mysql)に s-jisで日本語を保存し...
- cakephpで、authコンポーネントを組み込んだところ文字化けして表示されるようになりました。なぜでしょ...
