Mysql
 sql >> Base de données >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE ne fonctionne pas à partir de php 5.5 en utilisant PDO

Vous devez configurer les deux le client et le serveur pour autoriser cette commande :

  1. Assurez-vous que le serveur autorise LOAD DATA LOCAL INFILE. Modifiez /etc/my.cnf sur le serveur MySQL :

    [server]
    local-infile=1
    
  2. Définissez l'attribut PDO dans votre 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 ','");
    

    Cela doit être défini dans l'argument des options du pilote au constructeur, pas dans un appel ultérieur à setAttribute() .

    Je viens de tester l'exemple de code ci-dessus avec succès avec PHP 5.5.8 et Percona Server 5.6.15 sur CentOS Linux 6.5.

Si vous rencontrez toujours des problèmes, il se peut que vous ayez une version du client MySQL ou de PDO qui n'autorise pas local-infile. Les exigences sont décrites dans http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html

Le mysql.allow_local_infile l'option dans votre php.ini n'est pas pertinente pour PDO.