Sie müssen beide konfigurieren der Client und der Server diesen Befehl zulassen:
-
Stellen Sie sicher, dass der Server LOAD DATA LOCAL INFILE erlaubt. Bearbeiten Sie /etc/my.cnf auf dem MySQL-Server:
[server] local-infile=1
-
Setzen Sie das PDO-Attribut in Ihrem PHP-Skript:
<?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 ','");
Dies muss im Argument der Treiberoptionen für den Konstruktor festgelegt werden, nicht in einem nachfolgenden Aufruf von
setAttribute()
.Ich habe gerade das obige Codebeispiel erfolgreich mit PHP 5.5.8 und Percona Server 5.6.15 auf CentOS Linux 6.5 getestet.
Wenn Sie immer noch Probleme haben, haben Sie möglicherweise einen Build des MySQL-Clients oder PDO, der keine lokale Datei zulässt. Die Anforderungen sind beschrieben in http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html
Die mysql.allow_local_infile
Option in Ihrer php.ini ist für PDO nicht relevant.