Page 1 sur 1

Quillemets, probleme requete Mysql

Posté : 21 janv. 2008, 08:52
par jeanmed
Bonjour,

J ai un problème de requête lorsque le texte recherché dans ma table contient un guillemet.

Voici mon code :

Code : Tout sélectionner

$sql="SELECT `id` , `id_carac` , `nom_carac` , `vide` FROM `nom_carac` WHERE 1 AND `nom_carac` LIKE 'Pas d'aplat"; $donnes=mysql_fetch_array( $recup); $id=$donnes["id"];
Dans ma table il y a bien une ligne avec le texte "Pas d'aplat", quand je fé la requête dans phpMyadmin cela fonctionne mais pas via mon code php.

Merci de votre aide

Posté : 21 janv. 2008, 11:06
par Ryle
En sql, on délimite une chaine avec des apostrophes.

Première erreur dans ton code, tu ouvres bien une apostrophe en début de chaine, mais tu ne la referme pas :)

Second problème, c'est que ta chaine contient déjà une apostrophe. Du coup sql va l'interpréter comme s'il s'agissait de la fin de la chaine et va se retrouver avec un "aplat" dont il ne sait que faire. Pour éviter cela, il te faut protéger les apostrophes de ta chaine. Pour MySQL, il faut y ajouter un antislash : 'Pas d\'aplat'

PHP propose des fonctions afin de protéger tes chaines : mysql_real_escape_string()

Enfin, une petite remarqur, si tu recherche la chaine éxacte, évite d'utiliser LIKE et préfère un simple "=" :) (voire la FAQ sur les bonnes pratiques SQL ;))

merci

Posté : 21 janv. 2008, 13:15
par jeanmed
Ok donc je dois revoir tous les textes de ma table pour mettre à \' sur les guillemets.

JE ne peux pas faire une requette du genre :

sql="select * from `matable` where `fontionmettreslsh (montexte)`"="addslashes('mon t\'eexr')";

Posté : 21 janv. 2008, 15:07
par Ryle
Nonononononononononon .... tu ne dois pas modifier tes enregistrements, seulement la syntaxe de ta requête SQL pour éviter qu'il ne confonde les apostrpohes contenues dans une chaine avec celles qui délimitent la chaine :)

Dans ta base tu dois bien avoir "Pas d'aplat", mais dans tes requête sql il te faut protéger l'apostrohpe :
$sql="SELECT id, id_carac, nom_carac, vide 
  FROM nom_carac 
  WHERE nom_carac = 'Pas d\'aplat' ";

// ou bien 
$sql="SELECT id, id_carac, nom_carac, vide 
  FROM nom_carac 
  WHERE nom_carac = '" . mysql_real_escape_string("Pas d'aplat") . "'";