• 締切済み

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

専門家の回答 ( 1 )

回答No.1

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

参考URL:
http://webkaru.net/php/strings-single-double-quotation/
tajix14
質問者

お礼

有難うございます!! 下記でできました。深く御礼申し上げます。 $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(); }

川島 俊之(@shuminm1628s) プロフィール

【自己紹介】 久が原教室インストラクターの川島です。私はパソコンは自動車のようなものだと思っています。免許をとって運転ができるようになると、自分の世界が広がりますよね。パソコンやインターネットも同じよ...

もっと見る

関連するQ&A