IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MySQL Discussion :

impossible d’exécuter load data infile


Sujet :

MySQL

  1. #1
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut impossible d’exécuter load data infile
    Bonjour @tous,

    Voilà mon soucis depuis la mise en ligne de mon application sur un serveur VPS (OVH)

    J'ai choisi un système d'exploitation / distribution Debian 7 (Wheezy) et depuis, je n'arrive plus à utiliser l'instruction SQL : LOAD DATA INFILE

    Aucun résultat n'est inséré dans ma bdd et c'est là que le bât blesse

    Voici mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $bdd->exec("LOAD DATA INFILE 'test.txt'
              REPLACE
              INTO TABLE membres
    		FIELDS
    			TERMINATED BY ';'
    			ENCLOSED BY '\\\"'
    			ESCAPED BY '\\\\'
    		LINES
    			STARTING BY ''
    			TERMINATED BY '\\n'
    			(id, login, statut)");
    Le contenu de mon fichier test.txt est le suivant :

    "1";"Vanessa";"Admin"
    "2";"Leti";"moderateur"
    "3";"Benoit";"vip"
    "4";"JP";"super"
    ... et la structure de ma bdd, à savoir :

    +-----------+
    | Membres |
    +-----------+
    | id |
    | login |
    | statut |
    +-----------+
    Je pense que je n'ai pas correctement configuré mon serveur. J'ai pourtant modifié mon fichier my.cnf et ai rajouté les lignes :

    [client]
    loose-local-infile = 1

    [mysql]
    local-infile

    [mysqld]
    local-infile

    Je suis vraiment embêtée ... d'autant plus que cette instruction fonctionnait parfaitement sur une ancienne VM (elle-même sous linux et distribution Debian).

    En vous remerciant d'avance de toute l'attention que vous porterez à ce post !

  2. #2
    Membre régulier Avatar de Angelik
    Profil pro
    Inscrit en
    Août 2006
    Messages
    253
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 253
    Points : 70
    Points
    70
    Par défaut
    Lorsque j'utilise l'instruction en ligne de commande, mon LOAD DATE INFILE fonctionne...

    J'ai créé un fichier import.txt dans le dossier /tmp

    Voici la structure de fichier .txt (import.txt)

    1;ANN;admin
    2;JP;super
    3;COCO;banni
    4;BEN;boite
    Dans mysql >

    USE membres;
    LOAD DATA LOCAL INFILE '/tmp/import.txt' INTO TABLE membres FIELDS TERMINATED BY ";" LINES TERMINATED BY "\n";
    Et là, j'ai bien mes 4 enregistrements ... correctement insérés dans ma table membres.

    Lorsque j'utilise PDO à présent, rien ...

    Voici la structure de ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $dsn = "mysql:host=localhost;dbname=octo";
    $user = "root";
    $password = "p@ssword";
    $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 '/tmp/import.txt' INTO TABLE membres FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n';");
    rien rien ...

    Alors, j'ai 1 hypothèse ... le chemin de mon fichier n'est p-e pas bon. M'enfin ça parait peu probable quand même ? si ?

    Merci d'avance

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut Angelik.

    Il y a quelque chose que je ne comprends pas dans ton exemple.
    En ligne de commandes, tu utilises comme base de données "use membres" et en php tu utilises "mysql:host=localhost;dbname=octo".
    Donc, tu as créés deux base de données, dont l'une se nomme "membres" et l'autre octo". Et à chaque fois, tu as une table nommé "membres".
    C'est bien cela ?

    L'autre problème que je voie, c'est le chemin d'accès à "/tmp/import.txt". Personnellement, j'aurai indiqué un chemin absolue et non relatif.

    Voici un exercice que j'ai fait sur l'utilisation de la commande "load file".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    -- ==============
    -- Table `cities`
    -- ==============
     
    DROP TABLE IF EXISTS Cities;
     
    CREATE TABLE Cities (
        Country     CHAR(2),
        City        CHAR(22),
        AccentCity  CHAR(3),
        Region      CHAR(2),
        Population  INT UNSIGNED NULL DEFAULT NULL,
        Latitude    FLOAT,
        Longitude   FLOAT
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`utf8` COLLATE=`utf8_general_ci`;
     
    -- ===============================
    -- Chargement de la table `cities`
    -- ===============================
     
    LOAD DATA LOCAL INFILE 'Charge.txt' INTO TABLE `Cities`
        CHARACTER SET latin1
    	FIELDS TERMINATED BY ','
    	LINES  TERMINATED BY '\n'
        IGNORE 0 LINES
        (@F1, @F2, @F3, @F4, Population, Latitude, Longitude)
    	set Country    = trim(@F1),
    	    City       = trim(@F2), 
    	    AccentCity = trim(@F3),
    	    Region     = trim(@F4);
    Nul besoin de mettre les champs entre guillemets.
    De plus, je supprime les espaces avant et après de la chaîne de caractères.

    Et voici mon fichier à charger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fr, dijon bourgogne,     ---, bo, 500000,  200, 150
    fr, paris ile de france, ---, il, 2000000, 100, 50
    Citation Envoyé par Angelik
    d'autant plus que cette instruction fonctionnait parfaitement sur une ancienne VM (elle-même sous linux et distribution Debian).
    Rien à voir avec Debian ou linux. C'est une commande appartenant à MySql.
    Et ce que tu nous donnes, en parlant des modifications, se rapporte au fichier "my.ini" pour windows ou "my.cnf" pour linux.
    Chez moi, je n'utilise pas ce genre de paramétrage dans le fichier "my.ini" (oui, je suis sous windows).

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. [LOAD DATA INFILE] clé auto incrémentés
    Par ashurai dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/02/2006, 17h17
  2. Réponses: 5
    Dernier message: 18/04/2005, 12h38
  3. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 09h37
  4. Problème avec LOAD DATA INFILE
    Par ka0z dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2004, 14h59
  5. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo