Aller au contenu

Définition d'une variable


Sujets conseillés

Posté

Bonjour,

Je cherche à stocker dans une variable l'instruction ci-dessous.

Quand je l'execute directement dans mySql, elle fonctionne très bien, mais quand je la réécrit pour la stocker dans une variables, je dois faire des ereures de guillemets et d'antislashs.

Quelqu'un peut-il m'aider ?

Merci

LOAD DATA INFILE "C:\\download\\catalog\\Accessories.txt" INTO TABLE cds_Accessories LINES TERMINATED BY '\r\n';

Posté

Et comme ceci ?

$query = "LOAD DATA INFILE \"C:\\download\\catalog\\Accessories.txt\" INTO TABLE cds_Accessories LINES TERMINATED BY '\r\n';";

Anonymus.

Posté

Bonjour Anonymous,

Je viens de tester ta requête et cela ne fonctionne pas, alors peut être que cela vient de ma démarche :

$sql = "LOAD DATA INFILE \"C:\\download\\catalog\\Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';";
echo $sql;
$result=mysql_query($sql,$connex);
mysql_close($connex);

Tu remarqueras que je fais un echo de $sql pour voir la requête

voici ce que cela m'affiche :

LOAD DATA INFILE "C:\download\catalog\Atr.txt" INTO TABLE cds_Atr LINES TERMINATED BY ' ';

J'ai alors essayé cette requête :

$sql = "LOAD DATA INFILE \"C:\\download\\catalog\\Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\\r\\n';";

et voici ce que ce la m'affiche :

LOAD DATA INFILE "C:\download\catalog\Atr.txt" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';

Mais cela ne marche pas non plus, suis je illogique ? ou ma démarche te parait-elle logique ?

Merci

Posté
Tu remarqueras que je fais un echo de $sql pour voir la requête

Tu as regardé la sortie d'écran ou le code source ?

C'est le code source du navigateur qu'il faut regarder.

Sinon, il te faut faire 'addslashes sur la requète, pour 'échapper' les slashes. En effet, il pense que les slashes sont doublés pour être échappés, d'où leur suppression.

Pour chaque slash, il faut en ajouter 1. Quitte à en mettre 4 de suite.

Anonymus.

Posté

Bonjour,

Je travaille sur un poste windows avec easyphp. Je teste mon application sur ce poste et quand elle sera opérationnelle, elle sera hébergée sur un serveur dédié linux.

Les lignes que j'obtiens sont bien celle que j'affiche sur mon navigateur

LOAD DATA INFILE "C:\download\catalog\Atr.txt" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';

Donc cette ligne vous parait correcte ?, d'après vous, mon code est logique ?

Je ne sais pas comment je pourrais gérer les droits, et quels droits, peux tu préciser ?

Merci pour votre aide

Karine ;)

Posté

Loulou,

Si ta commande ne s'exécute pas, il est aussi possible que le "Load Data Infile" ne soit pas autorisé.

Je ne sais pas pour easyPhp, mais c'est en général une fonction qui est bridée pour des raisons de sécurité.

Dan

Posté

Bonjour Dan,

Qu'est ce que tu entends par "bridée" ?, car quand je fais directement un load data infile via mon interface php my admin, cela fonctionne. Est ce qu'il te semble possible que l'on "bride" cette commande quand elle n'est pas executée via php my admin :?:

Posté

Salut Loulou,

Regardes si la permission (le privilège) 'read_file' est accordée.

Il est possible qu'il ne le soit pas par défaut pour tous les nouveaux utilisateurs, et c'est lui qui gère le "LOAD DATA INFILE" ;)

Dan

Posté

Bonsoir Dan,

Je viens de vérifier mes privilèges , comme tu me l'as conseillé, mais tout semble correct de ce côté là. Je vais devoir chercher plus

Merci quand-même.

Karine

Posté

Karine,

J'ai quelques doutes quant à la syntaxe de ta ligne.

Comme phpmyadmin fonctionne sous le serveur web avec des permissions spécifiques, ton programme n'a peut-être pas accès au fichier ?

Qu'obtiens-tu comme message d'erreur ? Cela nous aiderait de le connaître ;)

As-tu essayé un chemin relatif pour le fichier ?

Dan

Posté

Bonjour Dan,

En fait il n'y a pas de message d'erreur. Rien de vivible ne se passe à l'écran.

Tu penses qu'un chemin relatif serait plus approprié ?

du genre :

$sql = "LOAD DATA INFILE \"C:\\download\\catalog\\Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\\r\\n';";

$sql = "LOAD DATA INFILE \"../../../Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\\r\\n';";

  • 2 semaines plus tard...
Posté

Bonjour loulou,

J'ai le même problème que toi, j'aimerai executer une requête stockée dans une variable. La requête fonctionne parfaitement sous phpmyadmin mais quand j'execute le code php.... rien (même pas de message d'erreur d'ailleurs)

<b>Je voulais juste savoir si tu avais réussi à résoudre ton problème ? </b> (ce qui m'aiderai peut-être à résoudre le mien )

NB : Voici le code :

$query='LOAD DATA INFILE "E://JDD//saisieBD4.csv" INTO TABLE produit FIELDS TERMINATED BY ","';

mysql_query($query) ;

Merci

Posté

Bonjour Tornado,

En fait je n'ai toujours pas résolu ce problème. Je continue à chercher et si je trouve quelque chose, je le publierai.

Posté

Il est fait mention, dans la doc, du paramètre : LOCAL.

Ca donnerait :

LOAD DATA LOCAL....

Sinon, tu devrais essayer de remplacer les guillemets double par des guillemets simples, et inversement, voire par les ` (sous la touche 7) histoire de voire si ce ne serait pas un pb de guillemets. Tu pourrais aussi afficher le résultat du mysql_query;

$r = mysql_query($query);

echo $r;

histoire de voir si la requète 'passe'. la requète peut très bien passer, mais ne rien trouver.

Posté

Bonjour Anonymus et loulou,

Merci pour votre réponse l'un et l'autre...

J'ai essayé de remplacer les guillemets par d'autres caractères spéciaux... sans succès. :nono:

Je me doute que ça doit être une erreur de syntaxe qui me sautera bien aux yeux un jour ou l'autre.

Je vais maintenant passer à autre pour avancer qd même ;) et je laisse ce petit problème en suspend

Merci

Dès que j'ai trouvé quelquechose, je poste un message c promis

Posté

Tu as essayé le code :

$r = mysql_query($query);
echo "<br>requete : ".$r;

?

Posté

Re bonjour,

oui, pardon, j'ai bien testé ce code mais j'ai oublié d'en parler.

La variable $r est vide ce qui correspond à une erreur au niveau de la requête, c'est bien ça ?

Merci

Posté

re re bonjour ^_^

Mon problème est résolu, c'était un débile problème de slash dans le chemin...

J'ai eu la puce à l'oreille en visualisant le message d'erreur en langage (à peu près) compréhensible de mysql grâce à mysql_error.

Merci à Anonymus qui m'a permis de m'accrocher en montrant de l'intérêt à résoudre mon "petit" problème

Pour voir l'erreur : echo 'resultat requête : '.$r.mysql_error();

où $r=mysql_query(requête)

  • 3 semaines plus tard...
Posté

Bonjour à tous,

Désolée pour le temps de réponse, mais j'avais completement changé de sujet pour avance.

J'ai revu ce matin ce post et j'ai don testé à nouveau ma requête, en controlant mes erreurs, ainsi que l'a fait Tornado, et j'ai également vu que j'avais un problème de "\".

J'ai corrigé ce problème et voici pour ceux que cela intéresse le code :

Ma requête d'origne, qui fonctionne avec phpMyAdmin :

LOAD DATA INFILE "C:\\download\\catalog\\Atr.txt" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';

Ma requête modifiée pour la stocker dans une variable :

$sql = "LOAD DATA INFILE \"C:\\\download\\\catalog\\\Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';";

Pour contrôler à l'écran si la requête contenue dans ma variable était OK, j'ai procédé comme Tornado, c'est à dire ainsi :

$sql = "LOAD DATA INFILE \"C:\\\download\\\catalog\\\Atr.txt\" INTO TABLE cds_Atr LINES TERMINATED BY '\r\n';";
$result=mysql_query($sql,$connex);
echo 'resultat requête : '.$result.mysql_error();

Le résultat sur mon navigateur était :resultat requête : 1

j'ai ainsi su que la requête était bien executée.

Merci beaucoup à Anonymus, Dan et Tornado pour votre aide

Karine

:fete:

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...