zedtux Posté 30 Avril 2007 Posté 30 Avril 2007 Bonjour à toutes et tous ! Je travaille actuellement à ré-écrire le CMS PwsPHP 1.2.3 pour remplacer les requêtes simple ( et sujet au SQL Injection ) par l'utilisation de paramètres bindé ! Tout ce passe trés bien, sauf pour un cas : Dés qu'il y a un LIMIT avec paramètres bindé à la fin de la requête SQL. Par exemple, pour ce code : /* Crée une requête préparée */if ( $stmt = $mysqli->prepare("SELECT id, titre, auteur, date FROM forum WHERE id = ? LIMIT ?, ?") ){ /* Lecture des paramètres de marques */ $stmt->bind_param("iii", $id, $debut, $fin); /* Exécution de la requête */ $stmt->execute(); /* Lecture des variables résultantes */ $stmt->bind_result( $id, $titre, $auteur, $date); $stmt->fetch(); echo "Id : ".$id." Titre : ".$titre." Auteur : ".$auteur." Date : ".$date."<br />"; /* Fermeture du traitement */ $stmt->close();} else { echo "Erreur SQL : ".$mysqli->error."<br />";} Et l'erreur est : Erreur SQL : 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 '? , ?' at line 3 Donc si je remplace par des valeurs en dur dans le LIMIT ca fonctionne. Donc, comment ca se fait ?? Et comment résoudre ca ?? Merci par avance !!
zedtux Posté 7 Mai 2007 Auteur Posté 7 Mai 2007 Bon la réponse est débile je trouve ... mais elle est pour le moment la seule solution : On ne peut caster une variable que dans une clause WHERE. Aprés LIMIT, ORDER BY etc ... ne sont pas pris en compte. Le seule moyen est de placer un check sur les variables ( vérifier que l'on as bien un nombre uniquement ) et la mettre comme dans une requete tout à fais normale mysql.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant