probleme apostrophe dans requete sql

moi
Invité n'ayant pas de compte PHPfrance

05 mai 2008, 08:42

bonjour,
j'ai un petit souci, j'ai une requete qui fonctionne parfaitement, mais sauf lorsque j'ai des noms avec des apostrophes. Savez vous de quel manière je pourrai changer ma requete ?

Code : Tout sélectionner

$req = mysql_query("SELECT num_pers, excep FROM pers WHERE prenom_pers='$pre' and nom_pers='$nom'");
merci

Code : Tout sélectionner

Version du serveur: 5.0.17 Version de PHP: 5.2.0 CREATE TABLE `pers` ( `NUM_PERS` bigint(4) NOT NULL auto_increment, `EXCEP` tinyint(1) default NULL, PRIMARY KEY (`NUM_PERS`), ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=16380 ;

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 mai 2008, 10:09

Modération :
moi, ce sujet a déjà été traité et des réponses ont été apportées.
Faire une petite recherche préalable n'est pas superflu.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

05 mai 2008, 10:11

La solution la plus pérenne est d'utiliser la fonction PHP mysql_escape_string() avant de transmettre un paramètre à une requête.

De plus, il faut prendre quelques bonnes habitudes :
  • passer par une variable et ne pas mettre la requête directement dans mysql_query()
  • utiliser sprintf() plutôt que la concaténation
A partir de ton code, j'écrirais :
$str_requete = sprintf("SELECT 
							num_pers, excep
						FROM 
							pers
						WHERE 
							prenom_pers 	= '%s'
							AND nom_pers 	= '%s'",
						mysql_escape_string($pre),
						mysql_escape_string($nom));
$o_result = mysql_query($str_requete);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer