Page 1 sur 1

Pb avec des ; sur une requete sql de type INTO OUTFILE

Posté : 03 juin 2008, 10:57
par KILLGUNBLOOD
Bonjour à tous,

Voici mon code
     $sql3 = "SELECT * INTO OUTFILE '".$fichier_csv."' FIELDS TERMINATED BY ';' ENCLOSED BY ''  LINES TERMINATED BY '\r\n' FROM ad_raf where Annee='".$sannee."'";
      mysql_query ($sql3) or die (mysql_error());
Mon pb est le suivant, lorsque j'exporte mon fichier avec ce code, j'ai dans ma table des champs qui comporte des ; et naturellement mon fichier CSV est décalé à cause des ;. J'ai essayé avec un autre séparateur de champ mais lorsque j'essaye d'importer les données sous phpmyadmin, phpmyadmin n'accepte que les ;.
Existe t'il uine solution soit côté SQL ou PHP afin d'éviter d'exporter les ; se trouvant dans un champ d'un table sql ?

Code : Tout sélectionner

Voici ma table CREATE TABLE `ad_raf` ( `Code` int(11) NOT NULL auto_increment, `CodeCentre` int(11) NOT NULL, `DateRaf` varchar(5) NOT NULL, `Annee` varchar(4) NOT NULL, `Pdl` varchar(15) NOT NULL, `Info1` varchar(40) NOT NULL, `Info2` varchar(40) NOT NULL, `Energie` varchar(1) NOT NULL, `NumeroAc` varchar(1) NOT NULL, `Cap1` varchar(80) NOT NULL, `Cap2` varchar(80) NOT NULL, `Cap3` varchar(80) NOT NULL, `Cap4` varchar(80) NOT NULL, `Cap5` varchar(80) NOT NULL, `Cap6` varchar(80) NOT NULL, `Cap7` varchar(80) NOT NULL, `Cap8` varchar(80) NOT NULL, `Cap9` varchar(80) NOT NULL, `Cap10` varchar(80) NOT NULL, `Cap11` varchar(80) NOT NULL, `Cap12` varchar(80) NOT NULL, `Cap13` varchar(80) NOT NULL, `Cap14` varchar(80) NOT NULL, `Cap15` varchar(80) NOT NULL, `Cap16` varchar(80) NOT NULL, `Cap17` varchar(80) NOT NULL, `Cap18` varchar(80) NOT NULL, `Cap19` varchar(80) NOT NULL, `Cap20` varchar(80) NOT NULL, `Cap21` varchar(80) NOT NULL, `Cap22` varchar(80) NOT NULL, `Etat` varchar(40) NOT NULL, `Cont1` varchar(80) NOT NULL, `Cont2` varchar(80) NOT NULL, `Cont3` varchar(80) NOT NULL, `Cont4` varchar(80) NOT NULL, `Cont5` varchar(80) NOT NULL, `Cont6` varchar(80) NOT NULL, `Cont7` varchar(80) NOT NULL, `Cont8` varchar(80) NOT NULL, `Cont9` varchar(80) NOT NULL, `Cont10` varchar(80) NOT NULL, `Cont11` varchar(80) NOT NULL, `Cont12` varchar(80) NOT NULL, `Cont13` varchar(80) NOT NULL, `Cont14` varchar(80) NOT NULL, `Cont15` varchar(80) NOT NULL, `Cont16` varchar(80) NOT NULL, `Cont17` varchar(80) NOT NULL, `Cont18` varchar(80) NOT NULL, `Cont19` varchar(80) NOT NULL, `Cont20` varchar(80) NOT NULL, `Cont21` varchar(80) NOT NULL, `Cont22` varchar(80) NOT NULL, `App1` varchar(80) NOT NULL, `App2` varchar(80) NOT NULL, `App3` varchar(80) NOT NULL, `App4` varchar(80) NOT NULL, `App5` varchar(80) NOT NULL, `App6` varchar(80) NOT NULL, `App7` varchar(80) NOT NULL, `App8` varchar(80) NOT NULL, `App9` varchar(80) NOT NULL, `App10` varchar(80) NOT NULL, `App11` varchar(80) NOT NULL, `App12` varchar(80) NOT NULL, `App13` varchar(80) NOT NULL, `App14` varchar(80) NOT NULL, `App15` varchar(80) NOT NULL, `App16` varchar(80) NOT NULL, `App17` varchar(80) NOT NULL, `App18` varchar(80) NOT NULL, `App19` varchar(80) NOT NULL, `App20` varchar(80) NOT NULL, `App21` varchar(80) NOT NULL, `App22` varchar(80) NOT NULL, `Rec1` varchar(80) NOT NULL, `Rec2` varchar(80) NOT NULL, `Rec3` varchar(80) NOT NULL, `Rec4` varchar(80) NOT NULL, `Rec5` varchar(80) NOT NULL, `Rec6` varchar(80) NOT NULL, `Rec7` varchar(80) NOT NULL, `Rec8` varchar(80) NOT NULL, `Rec9` varchar(80) NOT NULL, `Rec10` varchar(80) NOT NULL, `Rec11` varchar(80) NOT NULL, `Rec12` varchar(80) NOT NULL, `Rec13` varchar(80) NOT NULL, `Rec14` varchar(80) NOT NULL, `Rec15` varchar(80) NOT NULL, `Rec16` varchar(80) NOT NULL, `Rec17` varchar(80) NOT NULL, `Rec18` varchar(80) NOT NULL, `Rec19` varchar(80) NOT NULL, `Rec20` varchar(80) NOT NULL, `Rec21` varchar(80) NOT NULL, `Rec22` varchar(80) NOT NULL, `IndexJour` varchar(5) NOT NULL, `IndexNuit` varchar(5) NOT NULL, `Ref` varchar(15) NOT NULL, `Nom` varchar(32) NOT NULL, `Compl` varchar(28) NOT NULL, `NumeroRue` varchar(4) NOT NULL, `Rue` varchar(28) NOT NULL, `Ville` varchar(50) NOT NULL, `DateDebRaf` varchar(8) NOT NULL, `Act` varchar(2) NOT NULL, PRIMARY KEY (`Code`), KEY `CodeCentre` (`CodeCentre`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5265 ;


Par avance merci

A+

Posté : 03 juin 2008, 11:09
par caroube
J'ai essayé avec un autre séparateur de champ mais lorsque j'essaye d'importer les données sous phpmyadmin, phpmyadmin n'accepte que les
Ce n'est pas l'impression que j'ai.
Je viens d'insérer le fichier

Code : Tout sélectionner

1*ceci est un test;avec un point-virgule* 2*ceci est un test;avec un autre point-virgule*
en indiquant à phpmyadmin 2.6.2-pl1 (onglet SQL, lien "Insérer des données provenant d'un fichier texte dans la table" en bas de la page) d'utiliser * comme séparateur et ça a parfaitement marché.

Posté : 03 juin 2008, 11:19
par KILLGUNBLOOD
Salut Caroube,

J'ai essayé ton idée, mais j'ai aussi des *. Alors j'ai essayé avec ce caractère § pour être sûr qu'il ne soit pas utilisé . Seulement dans phpmyadmin si je saisis ce caractère il me dit

Erreur
Paramètres invalides pour l'importation CSV: Champs terminés par

Posté : 03 juin 2008, 12:18
par Sékiltoyai
Au passage ta table est très mal conçue. Quand on a 22 champs du même type dans une table, on en crée une nouvelle…

Posté : 03 juin 2008, 13:25
par KILLGUNBLOOD
Je sais Sékiltoyai mais je ne savais pas comment faire pour capturer un ecran. J'ai donc utiliser du vbasic pour simuler l'envoi de touche et j'ai capturé les 22 lignes contenant 80 caractères que je stocke dans ma base ....

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 03 juin 2008, 16:56
par Sékiltoyai
Dans ce cas, tu devrais peut être plutôt lire le fichier avec fgetcsv() pour pouvoir réorganiser correctement les données et les insérer dans la base…

Posté : 04 juin 2008, 15:36
par caroube
Quand on a 22 champs du même type dans une table, on en crée une nouvelle…
Pas forcément : je suis en train de concevoir un QCM avec plus d'une centaine de champ Q001, Q002, Q003, ...
Pour le dépouillement (en partie sous Excel), les utilisateurs préfèrent avoir un tableau avec une ligne par questionnés, 100 colonnes et dans chaque colonne les réponses plutôt qu'un triplet (numéro d'utilisateur, numéro de question, réponse).

Posté : 04 juin 2008, 17:49
par Sékiltoyai
Ca se génère ça, tu n'es pas obligé d'exporter les données brutes de tes tables.

Posté : 05 juin 2008, 13:26
par KILLGUNBLOOD
Voilà j'ai trouvé la solution pour ceux que ca interresse,

Code : Tout sélectionner

$sql3 = "SELECT ad_raf.* INTO OUTFILE '".$fichier_csv."' FIELDS TERMINATED BY ';' ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' FROM ad_raf where Annee='".$sannee."'"; mysql_query ($sql3) or die (mysql_error());
En fait le pb venait du enclosed by j'ai rajouter des guillement pour chaque champs, comme ca quelque soit les caractères ca passe..

Merci à tous

Posté : 05 juin 2008, 18:13
par caroube
Ca se génère ça, tu n'es pas obligé d'exporter les données brutes de tes tables.
Oui, bien sûr. Mais quand on peut résoudre un problème avec des outils standards, pourquoi s'amuser à créer ses propres outils ?

Et puis, la syntaxe ci-dessous est tellement simple qu'il ne faut que 5 mn pour l'expliquer aux personnes qui font le dépouillement et à qui on file phpmyadmin :

Code : Tout sélectionner

select count(*) from enquete where q001='A' and q023 in ('C', 'D') and q074 = 'A'
Je ne suis pas sûr que le select sur une table (id_repondant, id_question, reponse) pour faire la même chose soit aussi limpide pour des non-informaticiens.

Bref, on ne va pas épiloguer pendant des jours : je voulais juste dire qu'il faut se méfier des affirmations "ceci est bien" ou "ceci n'est pas bien".