Aller au contenu

MySqli, prepare, bind_param avec LIMIT


zedtux

Sujets conseillés

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 ?? :unsure:

Merci par avance !! ;)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...