Page 1 sur 1

load data infile

Posté : 14 sept. 2006, 22:50
par jojolapine
Bonjour à tous,
suite à des recommendations, pour importer un fichier csv, je me suis trouner vers la faq!
Seulement, j'ai l'impression que j'ai une erreur de syntaxe, je précise que ça ne vient pas de la connection, c'est juste un unable to perform query!
donc bon voilà la requête sql:
$sql="
LOAD DATA INFILE 'france.csv'
INTO TABLE 'france'
FIELDS
TERMINATED BY ';'
ENCLOSED BY '\"'
ESCAPED BY '\\'
LINES
STARTING BY ''
TERMINATED BY '\n'
(id, ville, code, insee)";?>
SI vous voyez quelquechose qui cloche?
merci d'avance

Posté : 15 sept. 2006, 08:05
par Cyrano
Peut-être bien, je dirais sous réserve qu'il y a deux points qui sont suspects:
- les lignes commençant pas... rien, pas d'une grande utilité;
- l'échappement du \ doit poser problème dans "ESCAPED BY '\\'" parce que l'échappement va être convenablement effectué par PHP, mais du coup, la chaîne qui arrive en SQL sera : "ESCAPED BY '\'" et du coup l'apostrophe fermante ne sera pas interprétée convenablement;
Proposition à tester :
<?php
//...
$sql = "LOAD DATA INFILE 'france.csv' ".
       "INTO TABLE 'france' ".
       "FIELDS ".
           "TERMINATED BY ';' ".
           "ENCLOSED BY '\"' ".
           "ESCAPED BY '\\\\' ".
       "LINES ".
           "TERMINATED BY '\n' ".
       "(id, ville, code, insee)";
//...
?>

Posté : 15 sept. 2006, 10:19
par jojolapine
Bonjour,
bon malheureusement, ça ne marche toujours pas, voici ce que j'ai maintenant:
<?php
$sql = "LOAD DATA INFILE './france.csv' ".
       "INTO TABLE 'france' ".
       "FIELDS ".
           "TERMINATED BY ';' ".
           "ENCLOSED BY '\"' ".
           "ESCAPED BY '\\\\' ".
       "LINES ".
           "TERMINATED BY '\\r\\n' ".
       "(id, ville, code, insee)"; 
?>
et si j'affiche la requête:

Code : Tout sélectionner

LOAD DATA INFILE './france.csv' INTO TABLE 'france' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' (id, ville, code, insee)
et le message d'erreur de ma classe sql:
Unable to perform query: LOAD DATA INFILE './france.csv' INTO TABLE 'france' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' (id, ville, code, insee) : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''france' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINAT' at line 1
pour info, une petite partie du csv, pour voir si je ne me serai pas planter:
"1";"BOURG EN BRESSE";"01000";"01053"
"2";"BROU";"01000";"01914"
"3";"ST DENIS LES BOURG";"01000";"01344"
"4";"AMAREINS FRANCHELEINS CESSEINS";"01090";"1165"
"5";"AMAREINS";"01090";"01003"
Voilà, à votre bon coeur m'sieur dames!

Posté : 15 sept. 2006, 10:33
par zeus
Est-ce que tu as essayé d'exécuter cette requete directement depuis PhpMyAdmin ?

Plutôt de cumuler les sources d'erreur potentielles en mettant côte à côte PHP et SQL, essaye juste de résoudre MySQL et passe ensuite à PHP ;)

Posté : 15 sept. 2006, 11:28
par Invité
ben en fait je vois pas trop comment faire pour éxécuter dans phpmyadmin...?
Parceque pour spécifier le chemin du fichier ... :shock:

Posté : 15 sept. 2006, 11:35
par jojolapine
Bon alors voilà ce que j'ai essayer dans phpmyadmin:

Code : Tout sélectionner

LOAD DATA INFILE '***/www/***/france.csv' INTO TABLE 'france' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'( id, ville, code, insee )
et voilà le message d'erreur:

Code : Tout sélectionner

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''france' FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINAT' at line 1
Je ne sais plus par où prendre le problème

Posté : 15 sept. 2006, 11:49
par zeus
Le message d'erreur te dit que tu as une erreur à 'france' ... ce qui signifie qu'il a bloqué sur le caractère ' juste avant le nom de la table

Et, effectivement, il faut utiliser le caractère ` (AltGr+7) et non pas ' autour des noms de table en SQL ;)

Posté : 15 sept. 2006, 12:45
par jojolapine
Merci c'était bien ça qui faisait planter...
Par contre, j'ai bien peur de devoir abandonner cette solution, parceque maintenant, voici le message d'erreur que j'ai dans phpmyadmin:

Code : Tout sélectionner

#1045 - Access denied for user 'iseria'@'%' (using password: YES)
je pense que je n'ai pas les droits nécessaires, c'est bien ça?

Posté : 15 sept. 2006, 12:58
par zeus
Il n'est pas possible pour toi d'avoir accès à un user avec les bons droits ? ou de demander l'attribution de ces droits ?
Pour utiliser la commande LOAD DATA INFILE sur des fichiers du serveur, vous devez avoir le droit de FILE sur le serveur. See Section 5.5.3, « Droits fournis par MySQL ».

Posté : 15 sept. 2006, 13:05
par jojolapine
bon ben merci pour l'information supplémentaire, je vais me renseigner auprès de mon hébergeur.
Donc pour ce qui est de la requête: [résolu]