sql >> Database >  >> RDS >> Mysql

LAAD GEGEVENS LOKAAL INFILE werkt niet vanuit php 5.5 met PDO

U moet beide . configureren de client en de server om deze opdracht toe te staan:

  1. Zorg ervoor dat de server LOAD DATA LOCAL INFILE toestaat. Bewerk /etc/my.cnf op de MySQL-server:

    [server]
    local-infile=1
    
  2. Stel het PDO-kenmerk in uw PHP-script in:

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

    Dit moet worden ingesteld in het argument driver options aan de constructor, niet in een volgende aanroep van setAttribute() .

    Ik heb zojuist het bovenstaande codevoorbeeld met succes getest met PHP 5.5.8 en Percona Server 5.6.15 op CentOS Linux 6.5.

Als je nog steeds problemen hebt, heb je misschien een build van de MySQL-client of PDO die lokale infile niet toestaat. De vereisten worden beschreven in http://dev. mysql.com/doc/refman/5.6/en/load-data-local.html

Het mysql.allow_local_infile optie in uw php.ini is niet relevant voor PDO.



  1. Zelfvoorziening van gebruikersaccounts in PostgreSQL via onbevoegde anonieme toegang

  2. Hoe te controleren welke sloten op een tafel worden vastgehouden?

  3. Meerdere tabellen samenvoegen in SQL

  4. Krijg volledige MySQL-queryreeks bij invoegen of bijwerken