LIMIT AVEC PARAMETRES
zakri-04
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai essayé de coder une application avec pagination (Numéros de pages) de billets existants dans une table nomée billets en utilisant LIMIT avec deux paramètres à remplacer pour afficher chaque cinq billets dans une page et ainsi de suite voici le code :
et ç'a donné le message suivant :
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 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 '"$limitinfer","$limitsuper"' at line 1 in C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php:42 Stack trace: #0 C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php(42): PDOStatement->execute(Array) #1 {main} thrown in C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php on line 42
j'ai cherché la solution dans des forums una des solutions est ce code :
le résultat est page vide.
Je ne comprend pas ou est le problème.
Merci de bien me répondre.
J'ai essayé de coder une application avec pagination (Numéros de pages) de billets existants dans une table nomée billets en utilisant LIMIT avec deux paramètres à remplacer pour afficher chaque cinq billets dans une page et ainsi de suite voici le code :
$req = $bdd-> prepare('SELECT id,titre,contenu,DATE(date_creation) AS dat,TIME(date_creation) AS tim FROM billets ORDER BY date_creation LIMIT "$limitinfer","$limitsuper" '); $req->execute(array(':limitinf'=>$limitinfer,':limitsup'=>$limitsuper));
et ç'a donné le message suivant :
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 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 '"$limitinfer","$limitsuper"' at line 1 in C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php:42 Stack trace: #0 C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php(42): PDOStatement->execute(Array) #1 {main} thrown in C:\MAMP\htdocs\TP-OP_CLASS\Blog_index_3_2.php on line 42
j'ai cherché la solution dans des forums una des solutions est ce code :
$req = $bdd-> prepare('SELECT id,titre,contenu,DATE(date_creation) AS dat,TIME(date_creation) AS tim FROM billets ORDER BY date_creation LIMIT '.$limitinfer.','.$limitsuper.' ');
le résultat est page vide.
Je ne comprend pas ou est le problème.
Merci de bien me répondre.
A voir également:
- LIMIT AVEC PARAMETRES
- Parametres de mon ordinateur - Guide
- Paramètres dns - Guide
- Paramètres de confidentialité - Guide
- Leboncoin paramètres - Guide
- Paramètres iphone - Guide
2 réponses
Bonjour,
Pour les "limit" et "offset" tu ne peux pas les passer directement dans le execute.
Il faut utiliser du BIND
et si tu veux les passer dans ta requête sans "sécurité", tu aurais pu faire :
Mais je serai toi, je resterai sur la première proposition.
NB:
Si tu n'obtiens pas de résultats, fais un echo de la variable $sql ainsi que des variables $limitinfer et $limitsuper ... et teste la requête DIRECTEMENT en bdd ( via phpmyadmin par exemple ) pour voir ce qu'elle te retourne.
Pour les "limit" et "offset" tu ne peux pas les passer directement dans le execute.
Il faut utiliser du BIND
$sql = "SELECT id,titre,contenu,DATE(date_creation) AS dat,TIME(date_creation) AS tim FROM billets ORDER BY date_creation LIMIT :limit , :offset "; $stmt = $bdd->prepare($sql); $stmt->bindValue('limit', $limitinfer, PDO::PARAM_INT); $stmt->bindValue('offset', $limitsuper, PDO::PARAM_INT); $stmt->execute();
et si tu veux les passer dans ta requête sans "sécurité", tu aurais pu faire :
$sql = "SELECT id,titre,contenu,DATE(date_creation) AS dat,TIME(date_creation) AS tim FROM billets ORDER BY date_creation LIMIT $limitinfer , $limitsuper "; $stmt = $bdd->prepare($sql); $stmt->execute();
Mais je serai toi, je resterai sur la première proposition.
NB:
Si tu n'obtiens pas de résultats, fais un echo de la variable $sql ainsi que des variables $limitinfer et $limitsuper ... et teste la requête DIRECTEMENT en bdd ( via phpmyadmin par exemple ) pour voir ce qu'elle te retourne.
ça marche pas, je sais pas pourquoi?
ça ne marche pas... c 'est à dire ...???
Quel code as tu utilisé ?
As tu des messages d'erreur ?
As tu activé l'affichage des erreurs PDO ? ( voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs)
As tu fais un ECHO de ta variable $sql pour voir ce qu'elle contient ?
Idem pour tes variables php : $limitinfer et $limitsuper ?
Quel code as tu utilisé ?
As tu des messages d'erreur ?
As tu activé l'affichage des erreurs PDO ? ( voir ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs)
As tu fais un ECHO de ta variable $sql pour voir ce qu'elle contient ?
Idem pour tes variables php : $limitinfer et $limitsuper ?