Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE não funciona a partir do php 5.5 usando PDO


Você precisa configurar ambos o cliente e o servidor para permitir este comando:

  1. Certifique-se de que o servidor permite LOAD DATA LOCAL INFILE. Edite /etc/my.cnf no servidor MySQL:
    [server]
    local-infile=1
    

  2. Defina o atributo PDO em seu script 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 ','");
    

    Isso precisa ser definido no argumento de opções do driver para o construtor, não em uma chamada subsequente para setAttribute() .

    Acabei de testar o exemplo de código acima com sucesso com PHP 5.5.8 e Percona Server 5.6.15 no CentOS Linux 6.5.

Se você ainda tiver problemas, você pode ter uma compilação do cliente MySQL ou PDO que não permite arquivo local. Os requisitos estão descritos em http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html

O mysql.allow_local_infile opção em seu php.ini não é relevante para PDO.