両方を構成する必要があります このコマンドを許可するクライアントとサーバー:
-
サーバーがLOADDATALOCALINFILEを許可していることを確認してください。 MySQLサーバーで/etc/my.cnfを編集します:
[server] local-infile=1
-
PHPスクリプトでPDO属性を設定します:
<?php $dsn = "mysql:host=localhost;dbname=test"; $user = "root"; $password = "root"; $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1)); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("LOAD DATA LOCAL INFILE 'foo.csv' INTO TABLE foo FIELDS TERMINATED BY ','");
これは、後続の
setAttribute()
の呼び出しではなく、コンストラクターのドライバーオプション引数で設定する必要があります。 。上記のコード例を、CentOSLinux6.5上のPHP5.5.8およびPerconaServer5.6.15で正常にテストしました。
それでも問題が解決しない場合は、local-infileを許可しないMySQLクライアントまたはPDOのビルドがある可能性があります。要件は、 http://devで説明されています。 mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
php.iniのオプションはPDOとは関係ありません。