位置情報で子どもの居場所をお知らせ

phpでcsvファイルをフォルダにアップロードし、これをMySQLにインポートするプログラムを作成しています。
以下のソースを実行したところエラーが発生しました。


-----food.csv----------------------------------------------------------------------

"No","name","price"
"1","うどん","100"
"2","ぱすた","500"
"3","カレー","300"
----------------------------------------------------------------------------------

-----BaseDAO.php------------------------------------------------------------------
<?php

class BaseDAO{
function connect(){
try {
$dsn = "mysql:host=localhost;dbname=food";

$option = array(
// エラーモードを例外スローに設定
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
// local ファイルからload可能にする
PDO::MYSQL_ATTR_LOCAL_INFILE => true

);

$user = 'username';
$password = 'password';
$pdo = new PDO($dsn, $user, $password, $option);
$pdo->exec("SET NAMES utf8");
return $pdo;

//var_dump($pdo);

} catch (PDOException $ex) {
print($ex->getMessage());
die("データベース接続に失敗しました");
}
return null;
}

function disconnect($dao){
$dao = null;
}

}
?>
----------------------------------------------------------------------------------

------uploadcsv.php-----------------------------------------------------------------

<?php
require_once 'BaseDAO.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"];

$sql_src = <<<SQL
LOAD DATA LOCAL INFILE %s INTO TABLE `%s`
CHARACTER SET sjis
fields terminated by ',' enclosed by '"'
lines terminated by '\\r\\n'
IGNORE 1 LINES
SQL;

$table= 'food'; //テーブル名

$inport=new BaseDAO(); //インスタンス作成
$pdo=$inport->connect(); //pdoクラスに接続

$sql = sprintf($sql_src , $pdo->quote($file), $table);

//sql文の実行
$stmt = $pdo->query($sql);


echo "インポートが完了しました!";
//失敗したとき
} else {
echo "ファイルをアップロードできません。";
}
} else {
echo "ファイルが選択されていません。";
}
?>

-----index.html---------------------------------------------------------------------

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>sample</title>
</head>
<body>
<form action="uploadcsv.php" method="POST" enctype="multipart/form-data">
ファイル:<br>
<input type="file" name="upfile" size="30"><br>
<br>
<input type="submit" value="アップロード">
</form>
</body>
</html>

----------------------------------------------------------------------------------

--------foodテーブルを作成するSQL文------------------------------------------------

CREATE TABLE IF NOT EXISTS `food` (
`No` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`price` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

----------------------------------------------------------------------------------


実行したところ以下のエラーが発生しました。
Warning: PDO::query() [pdo.query]: LOAD DATA LOCAL INFILE forbidden in C:\xampp\htdocs\food\uploadcsv.php on line 30

<当方のPC環境>
phpMyAdmin:3.3.9
PHP: 5.3.5
Apache 2.2.17
MySQL 5.5.8
XAMPP version 1.7.4

フォルダ(files)にcsvファイルがアップロードされているところまでは確認できましたが、MySQLにインポートされていないようです。
BaseDAO.php内の「PDO::MYSQL_ATTR_LOCAL_INFILE => true」が効いていないように思えます。
初歩的な質問で凝縮ですが、原因を教えていただきたく存じます。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

xamppでload data local がエラーになるのは知ってましたが、日本語で検索してもでてきませんねぇ。


http://osdir.com/ml/ProfessionalPHPDevelopers/20 …
なにやら linux でも同じ問題があるらしい。
→検索キーワード「PDO, mysqlnd bug load」で漸く、、、

https://bugs.php.net/bug.php?id=54158

mysqli では問題ないので pdo_mysql の問題のようです。
どうやら、pdo_mysql driver の再コンパイルが必要らしい。
でもって、php5.4でも配布版では直ってないらしいです。上記ページの最後に以下の記述が!。
>I still seem to have this problem on: PHP 5.4.17-1~precise+1
Ubuntu 12.04

windows での再コンパイルは、Cのコンパイラー持ってないと無理なので
対策1:load だけ、mysqli でやってしまう
対策2:windowsのlocalhost なら、php側ファイルであっても、絶対パスにすれば、mysql serverからも読み込み可能なので、local はずして、実行させる。
emulation mode (オプションの PDO::MYSQL_ATTR_DIRECT_QUERY =>true またはこのキー省略)で実行すればいけます。PDO::MYSQL_ATTR_DIRECT_QUERY =>false にすると、windowsのversionによってはまた違うエラーが出たりして、pdo_mysqlのload文への対応おかしいです。
<?php
// ファイル名を絶対パスにする。$fileに相対パスが入ってるとする。
$file = dirname(__FILE__) .DIRECTORY_SEPARATOR. $file;

参考URL:https://bugs.php.net/bug.php?id=54158
    • good
    • 0
この回答へのお礼

返信が大変遅くなってしまい申し訳ございません。
mysqli関数での接続と、絶対パスでのsql文実行の両方の方法でコードを修正して実行してみましたが、インポートされませんでした。sql文の中身を試しにechoで出力し、そのsql文をコピーしてmysqlから実行してみたところインポートできました。という事はsql文は正しいようです。そうなるとおっしゃる通りphp側のバグという事になります。

悩み続けましたがやむおえずPHPのバージョン5.4.19とMySQLのバージョン5.5.32にそれぞれバージョンアップ、質問に記載したコードをそのままコピペしただけで実行できました。どうやらバージョンによっては不具合が生じるようです。

ともかく解決しましたので非常に助かりました。ご返信の内容の中には当方のほかのコードの参考になる内容(PDO接続の際のオプション記載について)も含まれていましたのでさっそく修正させていただきました。

ありがとうございました(#^.^#)

お礼日時:2014/03/10 23:26

ちょっと疑問なのですが


わざわざmove_uploaded_file()しないで、テンポラリフォルダの中から
csvファイルを取り込んでみては?
    • good
    • 0
この回答へのお礼

返信が大変おそくなって申し訳ございません。
move_uploaded_file()しないで直接一時フォルダから取り出す方法も試作してみましたが、うまくsql文が実行されませんでした。
結局PHPのバージョンを上げたことで解決いたしました。
一緒に考えていただけて感謝しております。ありがとうございました(*^^*)

お礼日時:2014/03/10 23:35

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QPHP+MySQL でのcsvファイルインポート

PHP + MySQL で、他システムから出力されてきたcsvファイルをテーブルへインポートしたいと考えています。

LOAD DATA INFILE で取り込もうとしていますが、対象のcsvファイルの特徴のためにうまく行かず苦戦しています。

取り込みたいファイルは、以下のようになっています。
 ・各フィールドが "(ダブルクォート) で囲まれている
 ・各フィールドは ,(カンマ) で区切られている
 ・金額の項目には、桁区切りのカンマが入っている


 例) "0001","あああああ",…(中略)…,"105,000","100,000","5,000",…
    コード 項目名            税込み  税抜き 消費税
 というような形です。
 
 困っているのは、金額に使われている、桁区切りのカンマの処理についてです。
 目的としては、データベースへ取り込むときには 105,000 は 105000 として取り込めればいいのですが、他システムから、桁区切りがなされた状態でcsvが作成されてきています。

LOAD DATA INFILE test.csv INTO TABLE data_table FIELDS TERMINATED BY ',' ENCLOSED BY '\"' IGNORE 1 LINES;

 各項目のダブルクォートはENCLOSED BY で、項目を分けるカンマはTERMINATED BYで処理できていると思うのですが、金額の区切りに使われているカンマと項目の区切りのカンマを区別させられずに苦戦しています。

 事前にcsvを加工するのも考えてはいるのですが、なるべくcsvを加工せずにそのまま取込したいと思います。
 何か、簡単に回避できる方法等があればご教示願います。
 宜しくお願いします。

PHP + MySQL で、他システムから出力されてきたcsvファイルをテーブルへインポートしたいと考えています。

LOAD DATA INFILE で取り込もうとしていますが、対象のcsvファイルの特徴のためにうまく行かず苦戦しています。

取り込みたいファイルは、以下のようになっています。
 ・各フィールドが "(ダブルクォート) で囲まれている
 ・各フィールドは ,(カンマ) で区切られている
 ・金額の項目には、桁区切りのカンマが入っている


 例) "0001","あああああ",…(中略)…,"105,000","100,000","5,000",…
...続きを読む

Aベストアンサー

> "0001","あああああ",…(中略)…,"105,000","100,000","5,000"

常にこの書式であるという前提ですが、ファイルを1行ずつ読んで
カラム区切りをタブに変え、項目の整形を行う方法があります。

一度お試しください。


$file_name = "test.csv"; //LOADファイル

//ファイルオープン
$fp = fopen("./$file_name", "r");
$fw = fopen("./$file_name.tmp", "w"); //変換先ファイル

while(!feof($fp)){
$buf = fgets($fp, 2048);
$buf = str_replace("\",\"","\t",$buf); // 「","」を「\t」に置換
$buf = str_replace("\"","",$buf); // 「"」を「」に置換
//mb_convert_variables("UTF-8", "SJIS", $buf); // SJISをUTF-8に変換する場合
fputs($fw, $buf);
}

//ファイルクローズ
fclose($fp);
fclose($fw);

//タブ区切りでLOAD(パラメータは環境に合わせて調整ください)
$sql = "LOAD DATA LOCAL INFILE './$file_name.tmp' REPLACE INTO TABLE data_table FIELDS TERMINATED BY '\t';

$res = mysql_query($sql); // mysql_connect、mysql_closeは省略
if(!$res){
echo "LOAD ERROR!!";
}

$ret = unlink("./$file_name.tmp"); //変換先ファイルの削除


CSVはSJISだと思いますが、PHPの文字コードと異なる場合、
日本語を含んでいると文字化けを起こす場合があります。

念のため、PHPの文字コードに合わせ、mb_convert_variablesで"UTF-8"か"EUC"に
しておくほうがよいかと思います。

> "0001","あああああ",…(中略)…,"105,000","100,000","5,000"

常にこの書式であるという前提ですが、ファイルを1行ずつ読んで
カラム区切りをタブに変え、項目の整形を行う方法があります。

一度お試しください。


$file_name = "test.csv"; //LOADファイル

//ファイルオープン
$fp = fopen("./$file_name", "r");
$fw = fopen("./$file_name.tmp", "w"); //変換先ファイル

while(!feof($fp)){
$buf = fgets($fp, 2048);
$buf = str_replace("\",\"","\t",$buf); // 「","」を「\t」に置換
$buf = str_repla...続きを読む

Qユーザーがcsvファイルを指定して、自動的にmysqlに登録されるよう

ユーザーがcsvファイルを指定して、自動的にmysqlに登録されるようにするにはどうしたらいいか悩んでいます。

PHPでプログラムを書いているのですが、csvファイルをプログラム側で指定するのではなく、ユーザーにブラウザからファイルを指定してもらいたいのですが(ユーザーのローカルにcsvファイルがある)どのようにしたら上手く出来るのでしょうか?

HTMLでinput type="file"で出来ると思いきや、変数の受け渡しができず困っています。なにか良い方法があれば教えて頂けないでしょうか?
何卒宜しくお願い致します。

下記は参考プログラムです。
========================================
define('CSVFILE', './mycsv.txt');←ここをユーザーに指定してもらいたい。
define('DELIMITER', ',');  //データ区切り(カンマ)
define('ENCLOSURE', '"');  //データ囲み文字(ダブルクォーテーション)

//ファイルを開く
$fp = fopen(CSVFILE, 'r') or die('ファイルが開けません');

//テーブルを出力
echo '<table border="1">';
while ($field_array = fgetcsv($fp, 4096, DELIMITER, ENCLOSURE)) {
  echo '<tr>';
  foreach ($field_array as $value) {
    echo '<td>' . $value . '</td>';
    echo '<td>' . htmlspecialchars($value, ENT_QUOTES) . '</td>';
  }
  echo '</tr>';
}
echo '<table>';

//ファイルを閉じる
fclose($fp);
=========================================

ユーザーがcsvファイルを指定して、自動的にmysqlに登録されるようにするにはどうしたらいいか悩んでいます。

PHPでプログラムを書いているのですが、csvファイルをプログラム側で指定するのではなく、ユーザーにブラウザからファイルを指定してもらいたいのですが(ユーザーのローカルにcsvファイルがある)どのようにしたら上手く出来るのでしょうか?

HTMLでinput type="file"で出来ると思いきや、変数の受け渡しができず困っています。なにか良い方法があれば教えて頂けないでしょうか?
何卒宜しくお願い致...続きを読む

Aベストアンサー

ユーザーのローカルファイルをブラウザ経由で抜きたいという話ですか?
セキュリティ上無理ですね、早めにあきらめることをお勧めします。

近しいやり方でやるならftpなどでサーバーにアップするなどして
定期処理でmysqlに登録するプログラムを走らせるなどでしょうか
より自動にちかくするには場合によってはwsh+IEで処理すれば
アイコンワンクリックでなんとかなるかもしれません。

QLOAD DATA INFILE の使用について

サーバにある、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ベストアンサー

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

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

<?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

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

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

<?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->bind...続きを読む

QCSVファイルのインポートについて

宜しくお願いします。
CSVファイルをインポートしようとして、四苦八苦しています。item.csvというファイルをitemという名前のテーブルにインポートしようとしています。

load data local infile "item.csv" into table item fields terminated by ',';

とコマンドを入力すると、

The used command is not allowed with this MySQL version

というエラーが返されます。そこで、

load data infile "item.csv" into table item fields terminated by ',';

と入力すると、

Access denied for user: '****@localhost' (Using password: YES)

というエラーが返されます。
csvファイルの置き場所も解らないので、同じサーバの/public_html/test/php/csv/item.csvという位置と、/public_htmlよりもう一階層上のフォルダにitem.csvというファイルをアップしてあります。
相対パスやサーバがどの程度の階層まで検索してくれるのか解らないので、絶対パスでも指定してみましたが、全く同じエラーが返されてきました。
エラーの内容を翻訳してみたところ、

The used command is not allowed with this MySQL version
「使用されたコマンドは、このMySQL版で許されない」

Access denied for user: '****@localhost' (Using password: YES)
「ユーザー:『****@localhost』(パスワード:YESを使うこと)のために許されないアクセス」

という意味になりました。正直、どうすればいいのかさっぱりわかりません。この状況の打開策をご教授頂ければ助かります。何卒、宜しくお願い致します。尚、MySQLのバージョンはレンタルサーバの情報によると、「3.23.××以降」となっています。

宜しくお願いします。
CSVファイルをインポートしようとして、四苦八苦しています。item.csvというファイルをitemという名前のテーブルにインポートしようとしています。

load data local infile "item.csv" into table item fields terminated by ',';

とコマンドを入力すると、

The used command is not allowed with this MySQL version

というエラーが返されます。そこで、

load data infile "item.csv" into table item fields terminated by ',';

と入力すると、

Access denied for u...続きを読む

Aベストアンサー

インポートしようとしているテーブルに対してのfile権限が無いだけかな?
それとも、パスワードが間違ってるだけとか

MySQL 3.23.4 以降なら
show grants for ユーザ名
ってやって、file権限があるかどうか調べてくだされ

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QERROR1062:Duplicate entry.....というエラーが出てしまいました

いつもお世話になります。
データベースからSELECTで抽出したデータを別のテーブルにINSERTするSQLを実行したのですが、
ERROR1062:Duplicate entry.....というエラーが出てしまいました。
お詳しい方がいらっしゃいましたら、アドバイスをいただけませんでしょうか?よろしくお願いいたします。
【実行したSQL】
INSERT INTO tblA (dataA1, dataA2, dataA3, dataA4) SELECT "9001","AA",dataB1,dataB2 FROM tblB WHERE dataB1 = 52

tblAの主キー:dataA1とdataA2
tblBの主キー:dataB1

dataA1とdataA2はtblAの主キーとなっているため、重複してしまうということのようです。tblBの主キーはdataB1であるため、抽出されてくるデータは常に1件なので問題ないと期待していましたが、甘くなかったようです。何か良い方法はないものでしょうか?よろしくお願いいたします。

Aベストアンサー

「ERROR 1062」は、重複データを格納しようとした場合に出力されるエラーです。
既にdataA1='9001'&dataA2='AA'という行が、tblAに格納されているのですよね?

>抽出されてくるデータは常に1件なので問題ないと期待していました

「insert ~ select ~」を実行前に、既に同じデータが格納されているのでは?
あるいはprimary keyの指定が、質問中に記された通りでなく、2件以上検索されているかです。

>何か良い方法はないものでしょうか?

何をするための方法を、聞きたいのかが分かりませんが?

QDBエラーの意味

フォームからDBにデータ挿入しようとすると

Column count doesn't match value count at row 1

というエラーが出てしまいます・・・どういう意味を持ったエラーなんでしょうか?

Aベストアンサー

カラム数と値の数が合わない、と言う事です。簡単な英語なので覚えましょう。
カラム数が4つにもかかわらず、
"INSERT INTO tablename VALUES (1,'hoge',3)"
とやった場合等に出るエラーだと思います。

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

QCSVの特定のフィールドをインポート

load data local infileでcsvをインポートしているのですが
ヘルプなどを見ても特定のフィールドのみを選択する方法がよく分かりません
たとえば
csv:フィールドA、フィールドB、フィールドC、フィールドD、フィールドE、フィールドF
MySQL:カラム1、カラム2、カラム3、カラム4、カラム5

だとします、それを

フィールドA→カラム2
フィールドC→カラム3
フィールドD→カラム4
フィールドF→カラム5

という風に選択したいのですがどういう風に指定したらいいのでしょうか?
よろしくお願いします。

Aベストアンサー

オプションは順に記述する必要があるので、後ろではなく、変数指定の前(テーブル名の後)に記述する必要があります。

LOAD DATA INFILE 'file_name'
INTO TABLE table_name
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES TERMINATED BY '¥r¥n' IGNORE 1 LINES
(@fieldA, @fieldB, @fieldC, @fieldD, @fieldE, @fieldF)
SET col2=@fieldA, col3=@fieldC, col4=@fieldD, col5=@fieldF;

No1 の方がマニュアルへのリンクを張ってくれているので、一度目を通されるといいと思います。

QLOAD DATA LOCAL INFILE

LOAD DATA LOCAL INFILE を使ってmysql にcsv からデータを挿入したいのですが

#1148 - The used command is not allowed with this MySQL version

とエラーが出てきます。※エラー情報はmyphpadminから得ています。

以下の文を実行しています。
※他のサーバーで動いているので、ソースに間違いはないと思います。
※サーバーの引っ越しで出てきた不具合ですが、以前何かをしたかは覚えていません。。。

LOAD DATA LOCAL INFILE '/パス/data.txt' REPLACE INTO TABLE data fields terminated by ',' ENCLOSED BY '"' LINES TERMINATED BY ' '

権限を付与すれば良い、と言う記事を読んだのですが
具体的にはどのような事をしたらいいのでしょうか?

FTPでファイルをアップロードして、php を実行しています。

MySQL 5.1.73
PHP 5.3.3

よろしくお願いいたします。

LOAD DATA LOCAL INFILE を使ってmysql にcsv からデータを挿入したいのですが

#1148 - The used command is not allowed with this MySQL version

とエラーが出てきます。※エラー情報はmyphpadminから得ています。

以下の文を実行しています。
※他のサーバーで動いているので、ソースに間違いはないと思います。
※サーバーの引っ越しで出てきた不具合ですが、以前何かをしたかは覚えていません。。。

LOAD DATA LOCAL INFILE '/パス/data.txt' REPLACE INTO TABLE data fields terminated by ',' ENCLOSED...続きを読む

Aベストアンサー

ごめんなさい、ちょっと検証できてないんだけど

$sql_txt = <<<EOF
LOAD DATA LOCAL INFILE %s INTO TABLE `%s`
fields terminated by ',' enclosed by '"'
LINES TERMINATED BY '\n'
EOF;

としているところ
$sql_txtに投入する際「\n」が展開されてないですか?

LINES TERMINATED BY '\\n'
としてみてはどうでしょう?
(SQL文として\nという文字列にするので・・・)


人気Q&Aランキング