Auteur Sujet: [RESOLU] Problème de requete SQL avec like et apostrophe  (Lu 18961 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Lebanner

  • Habitué
  • **
  • Messages: 124
    • Spartan Fight
Salut,

Je fais la requête suivante dans ma page :

// Afficher les news du combattant
$query28 = "SELECT * FROM `fil_news` WHERE `Textelong_Fil_News` LIKE '%$Prenom%$Nom%' ORDER BY Num_Fil_News DESC";
$result28 = mysql_query ($query28) or die ('La requete SQL ne marche pas');
$num_rows28 = mysql_num_rows($result28);

Or elle marche bien sauf quand il y a un apostrophe dans le prénom ou le nom du mec.

Exemple : Jake O'Brien
Ce qui donne :  SELECT * FROM `fil_news` WHERE `Textelong_Fil_News` LIKE '%jake%o'brien%' ORDER BY Num_Fil_News DESC

Du coup la requête ne marche plus.

Quelqu'un aurait une idée pour résoudre ce problème ?

Merci encore
« Modifié: 26 juillet 2008 à 16:57:17 par Lebanner »

Hors ligne M@x

  • Habitué
  • **
  • Messages: 108
    • Upload Images
Re : Problème de requete SQL avec like et apostrophe
« Réponse #1 le: 25 juin 2008 à 09:09:28 »
??

// Afficher les news du combattant
$query28 = "SELECT * FROM `fil_news` WHERE `Textelong_Fil_News` LIKE '%addslashes($Prenom)%addslashes($Nom)%' ORDER BY Num_Fil_News DESC";
$result28 = mysql_query ($query28) or die ('La requete SQL ne marche pas');
$num_rows28 = mysql_num_rows($result28);

Quelle idée d'avoir un ' dans son nom ^^

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Problème de requete SQL avec like et apostrophe
« Réponse #2 le: 25 juin 2008 à 11:15:35 »
Réponse( la fonction en bas)avec un exemple comme ...O'Brien  -_-
http://www.kamath.com/codelibrary/cl003_apostrophe.asp
« Modifié: 25 juin 2008 à 11:18:03 par diaoul »

Hors ligne Lebanner

  • Habitué
  • **
  • Messages: 124
    • Spartan Fight
Re : Problème de requete SQL avec like et apostrophe
« Réponse #3 le: 25 juin 2008 à 21:31:43 »
J'ai essayé la technique de M@x mais ça ne marche pas.
Dans ma base j'ai essayé en mettant le nom à O'Brien et O\'Brien mais pareil ça ne marche pas.
Avec O'Brien, j'ai le message :
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 'Brien)%' ORDER BY Num_Fil_News DESC' at line 1

Avec O\'Brien, j'ai pas d'erreur de requête mais la requête ne trouve aucun résultat
De plus si je rajoute la fonction addslashes, je ne trouve aucun résultat pour mes autres noms sans apostrophe...

Pour la réponse de Diaoul, leur exemple à l'air bien mais moi mon champ est une variable et non un nom donc je n'arrive pas à exploiter cette soluce...

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Problème de requete SQL avec like et apostrophe
« Réponse #4 le: 26 juin 2008 à 10:14:04 »
vite fait sur le gaz sans tester...
c'est une fonction, tu fais passer ta variable par cette fonction
tavar=quotereplace(tavar)

et
query=....like tavar.....

Non?

Hors ligne Lebanner

  • Habitué
  • **
  • Messages: 124
    • Spartan Fight
Re : Problème de requete SQL avec like et apostrophe
« Réponse #5 le: 03 juillet 2008 à 20:44:17 »
Désolé mais là je suis une quiche, je n'y arrive pas.

Le problème c'est que quand j'écris la fonction :

function quoteReplace($Prenom)
{
var lsRegExp = /'/g;
return String($Prenom).replace(lsRegExp, "''");
}

ça me met ce message d'erreur :
Parse error: syntax error, unexpected T_VAR in /home/users2/j/jjbfrance/www/BD_Fighters/affiche_fighter2.php on line 667

La ligne 667 est : var lsRegExp = /'/g;

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Problème de requete SQL avec like et apostrophe
« Réponse #6 le: 04 juillet 2008 à 15:00:47 »
désolé, c'était un exemple de fonction en ASP je crois, il faut l'adapter au php et là je suis encore plus quiche que toi... -_-

Hors ligne Nommam

  • Connaisseur
  • ***
  • Messages: 430

Hors ligne Cedric_Koolkat

  • Râleur de service
  • Habitué
  • **
  • Messages: 241
    • Responsable web et entrepreneur indépendant
Re : Problème de requete SQL avec like et apostrophe
« Réponse #8 le: 11 juillet 2008 à 09:42:10 »
Gaffe aux risques d'injection sur ce type de requêtes... Perso je conseille toujours de vérifier AVANT de lancer la requête que la variable est bien une variable et pas une chaîne SQL bidon destinée à lister les tables, les bases ou pire dans ta BDD...

Pour ma part un strip_tags sur la variable avant de la passer dans la requête suffit à gérer ce type de chose.

Essayes ça :

$query28 = "SELECT * FROM `fil_news` WHERE `Textelong_Fil_News` LIKE '%".strip_tags($Prenom)."%".strip_tags($Nom)."%' ORDER BY Num_Fil_News DESC";
$result28 = mysql_query ($query28) or die ('La requete SQL ne marche pas');
$num_rows28 = mysql_num_rows($result28);
Cédric (Aube, France)
"Quand la pie pète, le geai ricane" Proverbe ornitho

Hors ligne Lebanner

  • Habitué
  • **
  • Messages: 124
    • Spartan Fight
Re : Problème de requete SQL avec like et apostrophe
« Réponse #9 le: 12 juillet 2008 à 10:59:47 »
Mes zones Nom et Prenom sont des varchar(50).
J'ai essayé ta solution, je n'ai pas de message d'erreur mais ça ne trouve pas de résultats (alors qu'il y en a).
J'ai essayé en mettant O'Bien et O\'Bien dans la BD mais ça ne change rien.

Hors ligne Cedric_Koolkat

  • Râleur de service
  • Habitué
  • **
  • Messages: 241
    • Responsable web et entrepreneur indépendant
Re : Problème de requete SQL avec like et apostrophe
« Réponse #10 le: 21 juillet 2008 à 21:43:21 »
Étrange, j'utilise ça sur l'un de mes sites et ça passe sans aucun soucis (sur des expressions avec apostrophes)  :huh:
Cédric (Aube, France)
"Quand la pie pète, le geai ricane" Proverbe ornitho

Hors ligne Just

  • Expert
  • ****
  • Messages: 924
    • AiN-IRC LE portail du 01 [Ain]!
Re : Problème de requete SQL avec like et apostrophe
« Réponse #11 le: 22 juillet 2008 à 11:55:32 »
Bonjour,

Comment planter une punaise avec un marteau...

Déjà expliquons la base :
le problème vient que l'apostrophe dans ta requête SQL est interprété comme un caractère syntaxique qui indique une fin de chaine de caractère. En effet cela provient du fait que tu commences ici ta déclaration de chaine par une même apostrophe.

Le plus simple? (quitte a vraiment écrasé la punaise ;))
$query28 = 'SELECT * FROM `fil_news` WHERE `Textelong_Fil_News` LIKE "%'.$Prenom.'%'.$Nom.'%" ORDER BY Num_Fil_News DESC';
Ce qui au passage suit certaine règles d'optimisation du code (que je ne détaillerais pas ici par manque de temps).
C'est une façon de faire... parmis tant d'autres.

Bon courage.
Just OnMyOwn ... :B
"Be CoOl, KeEp CoOl, HaVe FuN!"
-
http://www.ain-irc.net/
http://www.funpart.net/

Hors ligne Lebanner

  • Habitué
  • **
  • Messages: 124
    • Spartan Fight
Re : Problème de requete SQL avec like et apostrophe
« Réponse #12 le: 26 juillet 2008 à 16:56:54 »
Salut,

Merci !!!!!!!

ça marche nikel ta solution Just !

Merci encore d'avoir de ton temps pour m'aider.

A+

Hors ligne Just

  • Expert
  • ****
  • Messages: 924
    • AiN-IRC LE portail du 01 [Ain]!
Re : [RESOLU] Problème de requete SQL avec like et apostrophe
« Réponse #13 le: 28 juillet 2008 à 10:15:26 »
Salut,

J't'en pris ^^.
Content si ça a pu t'aider :).

J'aurais voulu te conseiller un excellent POST sur l'optimisation des syntaxe notamment au sujet de l'utilisation des " et des ' mais je ne le retrouve plus :(.

Bonne continuation!
Just OnMyOwn ... :B
"Be CoOl, KeEp CoOl, HaVe FuN!"
-
http://www.ain-irc.net/
http://www.funpart.net/