Mysql
 sql >> Datenbank >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE funktioniert nicht von PHP 5.5 mit PDO

Sie müssen beide konfigurieren der Client und der Server diesen Befehl zulassen:

  1. Stellen Sie sicher, dass der Server LOAD DATA LOCAL INFILE erlaubt. Bearbeiten Sie /etc/my.cnf auf dem MySQL-Server:

    [server]
    local-infile=1
    
  2. 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.