load data infile

ViPHP
ViPHP | 3607 Messages

14 sept. 2006, 22:50

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

Mammouth du PHP | 19672 Messages

15 sept. 2006, 08:05

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)";
//...
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 3607 Messages

15 sept. 2006, 10:19

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!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 sept. 2006, 10:33

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2006, 11:28

ben en fait je vois pas trop comment faire pour éxécuter dans phpmyadmin...?
Parceque pour spécifier le chemin du fichier ... :shock:

ViPHP
ViPHP | 3607 Messages

15 sept. 2006, 11:35

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 sept. 2006, 11:49

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3607 Messages

15 sept. 2006, 12:45

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?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 sept. 2006, 12:58

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 ».
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 3607 Messages

15 sept. 2006, 13:05

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]