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

サーバにある、CSVファイルをデータベース(mysql)に登録したいです。

$query = "LOAD DATA INFILE '[ファイル名]' INTO TABLE [テーブル名] FIELDS TERMINATED BY ','";



$result = mysql_query($query);

として実行すると、

Access denied for user 'user'@'%' (using password: YES)

というエラーになります。

色々検索すると、ユーザーはrootユーザーでないといけない・・・というのを見かけたのですが・・・
普通のユーザーではLOAD DATA INFILEを使用できませんか?

私は、レンタルサーバを使用していて、レンタルサーバ上からしかユーザーを追加できません。

この場合、LOAD DATA INFILE~ は使用できないのでしょうか?

また、もし使用できない場合、代替手段はあるのでしょうか?

A 回答 (3件)

> これはどのように作るのでしょうか?



私が作るならこんな感じ。

<?php

$dsn = 'mysql:dbname=mydata;host=localhost';
$user = 'user';
$password = 'password';

if (($fp = fopen("data.csv", "r")) !== FALSE) {
$dbh = new PDO($dsn, $user, $password);
$stmt1 = $dbh->prepare("INSERT INTO mydata (column1,column2,column3) VALUES (:DATA1,:DATA2,:DATA3)");

while (($data = fgetcsv($fp)) !== FALSE) {
$stmt1->bindValue(':DATA1', $data[0]);
$stmt1->bindValue(':DATA2', $data[1]);
$stmt1->bindValue(':DATA3', $data[2]);
$stmt1->execute();
}

fclose($fp);
unset($dbh);
}
?>

PHPのいいところは公式サイトのリファレンスが充実していることです。
頑張って意味は調べてみてください。

http://www.php.net/manual/ja/function.fopen.php
http://www.php.net/manual/ja/function.fgetcsv.php
http://www.php.net/manual/ja/book.pdo.php
    • good
    • 0
この回答へのお礼

コードまで書いて頂きありがとうございました。
頂いたコードを流用して無事にアップロードすることが出来ました。
PDOというのは初めて知りましたが、今後も勉強して使っていきたいと思います。
また、参考サイトも大変ためになりました。

一点わからないのですが、$stmt1 というのは何かの略なんでしょうか?

お礼日時:2013/04/11 17:14

> 一点わからないのですが、$stmt1 というのは何かの略なんでしょうか?



PDOStatementのインスタンスを入れているので、ステートメントの1個目という意味で使ってます。
複数のSQL文を同じループの中で使う時1個目、2個目と定義しておいて使い分ける事があるので、私はそんな感じで変数名を付けてます。
    • good
    • 0
この回答へのお礼

ご親切にありがとうございます!
なるほど!ステートメントの一つ目という意味なんですね。
大変勉強になりました。

お礼日時:2013/04/11 19:13

PHPを使っているので有れば、PHPでCSVファイルを開いてMySQLにINSERTするプログラムを作ればいいだけでは。

この回答への補足

回答どうもありがとうございます。

初心者なのですが、

>PHPでCSVファイルを開いてMySQLにINSERTするプログラムを作ればいいだけでは。

これはどのように作るのでしょうか?

補足日時:2013/04/11 11:05
    • good
    • 0

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