[MYSQL]SELECT qui ne retourne rien - à cause d'anti-slash

Bonjour,

Je stocke des chemins vers des fichiers dans ma base mysql.
Les anti-slash sont échappés ainsi que les quotes lors de l’insertion.

Voiçi un exemple de ce que j’ai dans la base :


 G:\\test\\in\\test.jpg

Mais je n’arrive pas à retrouver les lignes en faisant un SELECT :


 SELECT fichier FROM fm_test WHERE fichier LIKE 'G:\\test\\in\\test.jpg'
-> ne retourne rien

 SELECT fichier FROM fm_test WHERE fichier LIKE 'G:\test\\in\test.jpg'
-> ne retourne rien

 SELECT fichier FROM fm_test WHERE fichier LIKE 'G:\\\\test\\\\in\\\\test.jpg'
-> ne retourne rien


par contre,  SELECT fichier FROM fm_test WHERE fichier LIKE 'G:%'
-> retourne bien l'enregistrement, donc j'en deduis que le problème vient de l'antislash

Avez-vous une idée du problème ?

merci

mickaël

A priori, en SQL \ n’est pas un caractère d’échappement. Donc là, tu recherche G:\\ et pas G:\. Maintenant, si c’est mySQL, je sais pas.

Ensuite, ça sert à rien de faire un LIKE si tu n’utilises pas de joker (% et _ de base).

[edit] et sinon, peux tu ajouter le langage (ici sql ou mysqL?) dans le titre du sujet, en cliquant sur EDIT? Merci.

désolé pour le tag,c 'est fait.

C’est en mysql, et donc le \ sert d’échappement

essai ça

$sql = 'SELECT * ' . ' FROM `nomtable` ' . ' WHERE `index` = '. $param . ' LIMIT 0, 30';

faut pas oublier ton addslashes sur la variable contenant la chaine a chercher.

si ca ne marche pas, faut verifier qu’il y a pas eu une connerie lors de l’enregistrement des chemins (que tu as bien G:\rep dans ta table plutot que G:\\rep ou pire …)

Essaye d’abord dans phpmyadmin, voir où ça plante hein.

c’est pas en php, les enregistrements sont crées en c#.

la je fais les tests directement dans phpmyadmin. A prtir du moment ou il y a un anti-slash, je n’arrive plus à faire un select correctement.

dans mon champs, j’ai stocké ceci : G:\\test\\in\\test.jpg

Comme tu es sous Windows, le mieux serait quand même de remplacer \ par / (puisque ça fonctionne de manière indifférente). Sinon,

SET SESSION SQL_MODE = ‘ANSI’

(là c’est pour la session, ça évite de foutre le boxon ailleurs)

http://dev.mysql.com/doc/mysql/en/server-sql-mode.html

Y a aussi les ANSI_QUOTES à activer.

Le tout étant d’avoir le vrai comportement du SQL. Maintenant, je peux pas te dire plus.

Tu ne devrais pas avoir de doubles antislashes dans le contenu de ta table !
A priori je dirais que tu as échappé les antislahes une fois de trop lors de l’insertion.

Essaie ceci pour voir s’il y a un résultat:

SELECT fichier FROM fm_test WHERE fichier = ‘G:\\\\test\\\\in\\\\test.jpg’