Du skal konfigurere begge klienten og serveren for at tillade denne kommando:
-
Sørg for, at serveren tillader LOAD DATA LOCAL INFILE. Rediger /etc/my.cnf på MySQL-serveren:
[server] local-infile=1
-
Indstil PDO-attributten i dit PHP-script:
<?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 ','");
Dette skal indstilles i driveroptions-argumentet til konstruktøren, ikke i et efterfølgende kald til
setAttribute()
.Jeg har lige testet ovenstående kodeeksempel med succes med PHP 5.5.8 og Percona Server 5.6.15 på CentOS Linux 6.5.
Hvis du stadig har problemer, har du muligvis en build af MySQL-klienten eller PDO'en, der ikke tillader lokal-infil. Kravene er beskrevet i http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
mysql.allow_local_infile
mulighed i din php.ini er ikke relevant for PDO.