sql >> Databasteknik >  >> RDS >> Mysql

LOAD DATA LOCAL INFILE fungerar inte från php 5.5 med PDO

Du måste konfigurera båda klienten och servern för att tillåta detta kommando:

  1. Se till att servern tillåter LOAD DATA LOCAL INFILE. Redigera /etc/my.cnf på MySQL-servern:

    [server]
    local-infile=1
    
  2. Ställ in PDO-attributet i ditt 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 ','");
    

    Detta måste ställas in i drivrutinsalternativargumentet till konstruktorn, inte i ett efterföljande anrop till setAttribute() .

    Jag testade precis ovanstående kodexempel framgångsrikt med PHP 5.5.8 och Percona Server 5.6.15 på CentOS Linux 6.5.

Om du fortfarande har problem kan du ha en build av MySQL-klienten eller PDO som inte tillåter lokal infil. Kraven beskrivs i http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html

mysql.allow_local_infile alternativet i din php.ini är inte relevant för PDO.



  1. Paginering i SQL Server med OFFSET/FETCH

  2. Uppdatera en e-postprofil för databas (SSMS)

  3. Så här skapar du en grupperad rapport med hjälp av rapportguiden i Access 2016

  4. Entity Framework 6-transaktionsåterställning