sql >> Base de Datos >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE no funciona desde php 5.5 usando PDO

Necesitas configurar ambos el cliente y el servidor para permitir este comando:

  1. Asegúrese de que el servidor permita LOAD DATA LOCAL INFILE. Edite /etc/my.cnf en el servidor MySQL:

    [server]
    local-infile=1
    
  2. Establezca el atributo PDO en su secuencia de comandos PHP:

    <?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 ','");
    

    Esto debe configurarse en el argumento de opciones del controlador para el constructor, no en una llamada posterior a setAttribute() .

    Acabo de probar con éxito el ejemplo de código anterior con PHP 5.5.8 y Percona Server 5.6.15 en CentOS Linux 6.5.

Si aún tiene problemas, es posible que tenga una compilación del cliente MySQL o PDO que no permita la entrada local. Los requisitos se describen en http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html

El mysql.allow_local_infile La opción en su php.ini no es relevante para PDO.