sprintf () - PHP - Programmation
Marsh Posté le 29-10-2005 à 16:08:43
tes signle quotes dans la requête sont superflus, mysql_real_escape_truc le fait si neccessaire
Marsh Posté le 29-10-2005 à 17:46:33
shakpana a écrit : tes signle quotes dans la requête sont superflus, mysql_real_escape_truc le fait si neccessaire |
merci d'avoir répondu, mais....
tu en es certain parce que si je les enlève et que je fais echo $requete ;
j'ai ceci comme requete :
SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND MotsClef LIKE AND (Resume LIKE AND Resume LIKE ) AND Nom_Auteur LIKE AND Auteur LIKE AND nompropre LIKE AND localite LIKE AND Contrat LIKE AND annee BETWEEN 1000 AND 1350 ORDER BY annee
ce qui n'est pas bon parce qu'il manque... les single quotes.
avec ceci comme code :
Code :
|
j'ai ceci comme requete :
SELECT * FROM Actes, Bibliographie WHERE id = idBiblio AND MotsClef LIKE '' AND (Resume LIKE '' AND Resume LIKE '') AND Nom_Auteur LIKE '' AND Auteur LIKE '' AND nompropre LIKE '' AND localite LIKE '' AND Contrat LIKE '' AND annee BETWEEN 1000 AND 1350 ORDER BY annee
Ce qui est exacte, sauf que.... cela ne retourne AUCUN resultat (alors que les tables sont pleines).
d'ailleurs dans la documentation, c'est bien marqué avec les single quotes :
http://fr2.php.net/manual/fr/funct [...] string.php
Marsh Posté le 29-10-2005 à 18:45:58
ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :
Code :
|
et j'ai tellement l'habitude, que je suis allez trop vite
je merites au moins 3 claques ... excuses-moi, platement ...
sinon ton erreur ne viendrais pas de la requête LIKE '' ?
plutôt LIKE '%' ou '%searchword%'
Marsh Posté le 29-10-2005 à 18:57:51
shakpana a écrit : ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :
|
Oui, c'est exactement ça mon problème. Reste à trouver comment mettre la fonction d'ajout du single quote dans mysql_real_escape_string... Je pense que je finirai par trouver.
Juste pour que je ne travaille pas pour rien : on est bien d'accord que cette fonction résoudra mon problème d'encodage de mon script en utf8 et la connection mysql qui est en latin1 ?
Marsh Posté le 29-10-2005 à 19:06:52
shakpana a écrit : ok, je suis mais complètement à la mass, je suis désolé, en fait j'utilise une interface à mysql_real_truc qui me met automatiquement les quotes genre :
|
Ca vient de quote_smart filé dans la doc de mysql_real_escape_string ? Pour moi (et pas que pour moi d'ailleurs, c'est dit dans les commentaires il me semble), ce test ne sert à rien et est surtout dangereux : mysql_real_escape_string n'est pas suffisant en soi pour protéger des injections SQL, il faut aussi que la valeur soit entourée de quotes simples. Bref, inutile et faille de sécurité. Vaut mieux les rajouter dans tous les cas.
Marsh Posté le 29-10-2005 à 19:10:58
thiebo12375 a écrit : Oui, c'est exactement ça mon problème. Reste à trouver comment mettre la fonction d'ajout du single quote dans mysql_real_escape_string... Je pense que je finirai par trouver. |
Perso, voilà, à peu près, à quoi ressemble mon interface à mysql_real_truc
Code :
|
thiebo12375 a écrit : Juste pour que je ne travaille pas pour rien : on est bien d'accord que cette fonction résoudra mon problème d'encodage de mon script en utf8 et la connection mysql qui est en latin1 ? |
ça je ne sais pas, il me semble que oui d'après d'autres posts ici-même, mais j'ai directement contourner le pb en passant tout en UTF8, si tu es sur du mysql 4+, pourquoi pas un SET NAMES, avec eventuellement un CONVERT USING ?
Marsh Posté le 29-10-2005 à 19:11:53
Merci pour vos réponses. J'ai réussi à faire fonctionner en faisant :
$motcle = "'%".mysql_real_escape_string($_POST['motcle'])."%'";
ce qui ne répond pas à mon problème. Mes scripts sont en utf8 et la connection à mysql en latin1. Comment je dois convertir ? J'utilise utf8_encode() pour afficher correctement les données que je suis allé chercher dans mysql et ça marche. Mais quid si le visiteur du site fait une recherche ? La recherche est entrée en utf8 et la connection à mysql en latin1, donc si la recherche comporte un ê (par exemple), mysql ne trouvera aucun résultat !
Marsh Posté le 29-10-2005 à 15:48:48
bonjour,
Dû à un souci de conversion entre utf8 et latin1, j'utilise la fonction
sprintf() dans mes requetes mysql.
Tout se passe bien, sauf celle-ci :
Sans message d'erreur, il ne me retourne aucun résultat, alors que sans la fonciton mysql_real_escape_sting (), le résultat est bon.
Merci de vos pistes de réflection sur le sujet !
Thiebo
Message édité par thiebo12375 le 29-10-2005 à 16:00:32