Forum Clubic

Probleme de requette sql

voila j’importe les données de mon fichiers excel dans mysql …(le fichier est un .csv)…Ca fonctionne normalement…par contre en mettant cette requette directement dans php ca ne fonctionne pas…comment je dois l’ecrire…la voici :
LOAD DATA LOCAL INFILE ‘C:/Program Files/EasyPHP1-8\tmp\php1E.tmp’ REPLACE INTO TABLE organigramme
FIELDS TERMINATED BY ‘;’
ENCLOSED BY ‘"’
ESCAPED BY ‘\’
LINES TERMINATED BY ‘\r\n’

personne ?? d’ailleurs meme si je remplace le chemin crée par mysql par le nomdufichier.csv (qui est a la racine dc pas besoin de chemin)…rien ne se passe…je dois faire quoi?

2 petites questions :
Es-tu sous Windows ?
Et si oui, as-tu bien déclaré ta base de données en tant que source système ODBC (Panneau de config --> Outils d’administration --> Sources de données (ODBC) --> Onglet System DSN (ou File DSN, ou éventuellement User DSN) --> bouton Ajouter.
Sinon, PHP ne sera pas capable d’atteindre la base.

Mis à part ça, quelle méthode mysql utilises-tu pour exécuter ta requête d’insertion de fichier ?

oui je suis sur windows et je n’ai pas fait tt ca…je pensais que c’etait necessaire que pour access…pour mysql aussi???

ben …je suis pas sur d’avoir compris ta derniere question…mais je vais quand meme repondre (surment a coté :smiley: )…ben en php j’utilise la requette vu au dessus…sinon dans mysql sous phpmyadmin je fait "Insérer des données provenant d’un fichier texte dans la table "


et puis j'ai suivi tes explications.....mais je ne sais pas trop quoi ajouter dans sources de donnees (ODBC)

T’as tout à fait raison : pas besoin de déclarer la source pour mySQL. Désolé, me suis planté ! :op
Normal que tu te demandes quoi mettre, donc !

Pour ma dernière question, c’était : tu utilises mysql_query() ou autre chose pour lancer ta requête ? En toute logique ça devrait être le cas.
Ta connexion à la base de données se fait-elle correctement ?
As-tu un message d’erreur quelconque à un moment (quand tu te connectes, quand tu exécutes la requête, …).
Si oui, sur quelle ligne de code, et qu’est ce qu’elle te raconte, l’erreur ?

ben justement …je met bien tout dans un mysql_query…je n’ais aucune erreur renvoyé…et la connexion de fait correctement puisque je l’utilise le meme include dans d’autre page ac requetes et ca fonctionne…tien je poste le code complet…

<? include("connexion_bdd.php"); $file = fopen( "base.csv", 'r' ); $requette=mysql_query( 'LOAD DATA LOCAL INFILE $file REPLACE INTO TABLE organigramme FIELDS TERMINATED BY ";" ENCLOSED BY """ ESCAPED BY "\" LINES TERMINATED BY "\r\n"'); echo $requette; ?>

page BLANCHE !! :o


excuse $file = fopen( "base.csv", 'r' ); c'etait un test de ma part qui n'a pas fonctionné....j'ai finalement enlevé cette ligne et remplacer par le nom de mon fichier comme avant dans ma requete

Ok, je me disais bien qu’en filant un objet File, ça ne devait pas passer…

Sur ta page blanche, tu as essayé de regarder à quoi ressemblait le code source ?
Et sinon, dans les logs de ton serveur Web, t’as pas de message d’erreur PHP répertoriées ?

nn rien de tt ca… et oui j’ai regardé le code source
j’ai essayé maintenant de mettre ma requette dans une variable et ensuite de faire mysql_query($variable)…il m’affiche un truc que j’avais jamais vu …" query est vide"
donc si je comprends bien il n’arrive pas a recuperer les infos du fichier .csv sauf que je suis sur de mon coup parce que il est au meme endroit que la page…et le nom aussi je suis sur
enfin moi j’ai plus d’idée…

Essaye de faire comme ça :

$sql = “LOAD DATA LOCAL INFILE ‘C:\Program Files\EasyPHP1-8\tmp\php1E.tmp’ REPLACE INTO TABLE organigramme FIELDS TERMINATED BY ‘;’ ENCLOSED BY '”’ ESCAPED BY “\” LINES TERMINATED BY ‘\r\n’";

echo $sql;

$r = mysql_query($sql);


Sinon, si ça ne passe pas avec le chemin complet d’accès au fichier “à la Windows”, tu peux essayer avec le chemin absolu à la serveur Web :

/tmp/php1E.tmp

Ou en chemin relatif :

./php1E.tmp

Fais attention, ce ne sont que des exemples qui vont différer selon où se trouve la racine de ton site Web, ou ta page courante.
Edité le 27/05/2008 à 15:14

nn ca ne marche pas le probleme viens a mon avis de ENCLOSED BY “”"
les 3 guillemets il aime moyen mais j’arrive pas ecrire les ’ et " sans qu’il y ait de faute

C’est pour ça que je t’ai mis un echo $sql, pour voir ce que contient ta variable au final.

Il faut en fait que tu choisisses si tu stockes tes chaînes de caractères avec des doubles guillemets, ou des simples.
Dans mon exemple, j’ai choisi de délimiter avec des doubles guillemets. Donc, dès que je rencontre un double guillemet qui n’est pas un délimiteur mais qui doit être stockée dans ma variable, je mets un \ devant.

Tes 3 doubles guillemets ne fonctionneront pas. Tout d’abord parce qu’il me semble que mySQL attend des simples guillemets pour les zones de texte qui suivent INFILE, TERMINATED BY, ENCLOSED BY, ESCAPED BY et LINES TERMINATED BY.
Ensuite parce que si tu veux stocker le double guillemet du centre, il lui faut un \ devant.

D’ailleurs, en te faisant cette remarque, je me rends compte que j’ai fait une erreur dans ma ligne (comme quoi, c’est vraiment chiant et ça arrive à tout le monde !)

Voilà ce qu’il faudrait taper :

$sql = “LOAD DATA LOCAL INFILE ‘C:\Program Files\EasyPHP1-8\tmp\php1E.tmp’ REPLACE INTO TABLE organigramme FIELDS TERMINATED BY ‘;’ ENCLOSED BY '”’ ESCAPED BY ‘\’ LINES TERMINATED BY ‘\r\n’";

J’ai modifié la zone de texte après le ESCAPED BY, que j’avais mis entre double guillemets, alors qu’il fallait des simples ! :stuck_out_tongue:
Edité le 27/05/2008 à 15:31

ok jme coucherai moins con maintenant je sais a quoi serve les /…lol mais ca ne fonctionne tjr pas je ne sais pas pk


enfin les \ :D:D:D

Qu’est ce que ça t’affiche quand tu fais le echo $sql ?

Erreur de syntaxe près de ‘’’ à la ligne 6

tien en fait j’ai de nouveau changer de code il manquait des …par contre maintenant " Cette commande n’existe pas dans cette version de MySQL" est affichée…j’ai mysql via phpmyadmin 2.6.1…comment je fait pour mettre a jour ?? et puis est ce possible sans perdre toutes mes bases

Ok, alors vas-y morceau par morceau pour voir où la ligne plante.

Commence par :

$sql = “LOAD DATA LOCAL INFILE ‘C:\’”;

echo $sql

Teste.

Puis passe à :

$sql = “LOAD DATA LOCAL INFILE ‘C:\Program Files\’”;

Teste…

Et ainsi de suite, en t’arrêtant à chaque \.

lol je t’ai devancer…j’ai plus ce pb regarde un poil au dessus lol


et si j'enleve le LOCAL il me met " File 'C:\Program Files\EasyPHP1-8\mysql\data\girardot\base.csv' not found (Errcode: 2)" alors que le fichier est bien la

Bon, donc on avance.

Essaye de voir avec un fopen ce que PHP te dit.

$myFile = fopen(“C:\Program Files\EasyPHP1-8\mysql\data\girardot\base.csv”);

echo $myFile;

Si l’echo t’affiche 0, c’est que le fopen() a planté et que donc PHP n’arrive pas à ouvrir ce fichier.
Il va donc falloir passer en chemin type serveur Web (absolu ou relatif, à toi de voir), je pense.

en fait j’ai trouver qq chose qui pourrait etre pratique…
to use load data local infile function from mysql (at mysql 4.0.16, php 4.3.3), set fifth parameter of mysql_connect() to CLIENT_LOCAL_FILES(128), which based on MYSQL C API ( also mysql server support load file, check by "show variables like ‘local_infile’ ")

faut juste que je comprenne comment faire ca mais le gars sur le forum avait le meme pb que moi…sauf que lui il savait comment faire ce que j’ai copié au dessus :smiley:

bon j’ai enfin reussi a ce que ca marche …sauf que en fi de compte sa na servi a rien parce que je retrouve mon pb de fichier introuvable avec le code d’erreur File ‘base.csv’ not found (Errcode: 2)…Voila et normalement ce sra le dernier pb mdr…apres ca marchera lol