みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

exec関数の中に変数を入れたい

CSVファイル(kabu.csv)をmysqlに記録すべく下記のPHPを組みました。
PHPのexec関数の中で、MySQLを動作させます。

下記でPHPファイルと同じ階層にあるkabu.csvをMySQLにインサートすることが可能でした。
<?php
try {
$con = new PDO("mysql:host=127.0.0.1;dbname=db", "root", "password",
array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->exec('load data local infile \'kabu.csv\' IGNORE INTO TABLE photo_in fields terminated by \',\' enclosed by \'"\' escaped by \'"\'');
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
*********************************************************************************
次に、 \'kabu.csv\'を外に出しました。($file = 'kabu.csv';)
(将来的にこのkabu.csvはクエリーと連動して名前をが変わるようにする予定です。)
**********************************************************************************
<?php
$file = 'kabu.csv';

try {
$con = new PDO("mysql:host=127.0.0.1;dbname=db", "root", "password",
array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->exec('LOAD DATA LOCAL INFILE $file IGNORE INTO TABLE photo_in fields terminated by \',\' enclosed by \'"\' escaped by \'"\'');
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
単純に \'kabu.csv\'を$fileに置き換えただけではうまく動作しません。(MySQLに入力されません)
どのように記載すれば、作動するでしょうか?
初歩的な質問かと思いますが、よろしくお願いいたします。

環境はCentOS 6.6 + MySQL5.6 です。エラーは下記となります。
 SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$file IGNORE INTO TABLE photo_in fields terminated by ',' enclosed by '"' escape' at line 1

投稿日時 - 2016-01-09 20:17:00

QNo.9108736

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

エラーにヒントが有ります。
syntax to use near '$file IGNORE INTO TABLE photo_in fields
$file が展開されていませんよね。
execの引数がシングルクォーテーションでくくられているので、
$変数名は展開されません。ダブルクォーテーションで括る必要があります。
その場合、引数中のダブルクォーテーションは\でエスケープする必要があるので注意してください。

参考URL:http://webkaru.net/php/strings-single-double-quotation/

投稿日時 - 2016-01-09 21:07:51

お礼

有難うございます!!
下記でできました。深く御礼申し上げます。



$file = "'kabu.csv'";
try {
$con = new PDO("mysql:host=127.0.0.1;dbname=db", "root", "password",
array(PDO::MYSQL_ATTR_LOCAL_INFILE => 1));
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->exec("load data local infile $file IGNORE INTO TABLE photo_in fields terminated by ',' enclosed by '\"' escaped by '\"'");

} catch (PDOException $e) {
echo $e->getMessage();
}

投稿日時 - 2016-01-09 22:14:24

あなたにオススメの質問