Probleme de synthaxe PDO
gintoxic
Messages postés
524
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
bonjour,
voici le probleme affiché à la suite de mon code (dans le but de découper des textes et faire un systeme de pagination)
erreur : 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 '(-1)*,' at line 1
mon code :
merci à vous par avance
voici le probleme affiché à la suite de mon code (dans le but de découper des textes et faire un systeme de pagination)
erreur : 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 '(-1)*,' at line 1
mon code :
<?php
require_once('conf/connexion_bdd.php');
try{
$comptage = $bdd->prepare("SELECT titre,chapitre FROM saga WHERE id=:id AND titre=:titre LIMIT ($page_curr-1)*$perpage, $perpage");
$comptage->execute(array(':id'=>$_GET['id']));
$data = $comptage->fetch();
$nb_mark =strlen($data['chapitre']);
$perpage= 6500;
$nbpage = ceil($nb_mark/$perpage);
$page_curr = 1;
echo '<h1>'.$data['titre'].'</h1>';
echo $data['chapitre'];
}catch(PDOException $e){
die('erreur : '.$e->getMessage());
}
for($i=1; $i<=$nbpage; $i++){
echo $i.' / ';
}
?>
merci à vous par avance
3 réponses
Bonsoir
D'abord, syntaxe et non pas synthaxe ;)
Ensuite, tu n'as pas le droit d'employer une expression dans LIMIT, donc pas de ($page_curr-1)*$perpage. Il fat que la valeur qui apparaît dans le LIMIT soit déjà calculée, alors tu peux la calculer avant dans une autre variable, ou bien faire une concaténation, par exemple :
... LIMIT (5-1)*10,10 (incorrect)
et avec la concaténation:
... LIMIT 40,10 (correct)
D'abord, syntaxe et non pas synthaxe ;)
Ensuite, tu n'as pas le droit d'employer une expression dans LIMIT, donc pas de ($page_curr-1)*$perpage. Il fat que la valeur qui apparaît dans le LIMIT soit déjà calculée, alors tu peux la calculer avant dans une autre variable, ou bien faire une concaténation, par exemple :
$comptage = $bdd->prepare("SELECT titre,chapitre FROM saga WHERE id=:id AND titre=:titre LIMIT ('.$page_curr-1)*$perpage.", $perpage");La différence, c'est que si par exemple $page_curr vaut 5 et $perpage vaut 10, avec ce que tu as écrit la requête est :
... LIMIT (5-1)*10,10 (incorrect)
et avec la concaténation:
... LIMIT 40,10 (correct)
Mes excuses pour l'erreur dans ma correction :\
Qu'est-ce qui ne fonctionne pas correctement ? As-tu bien au moins un résultat si tu fais ta requête à la main avec les mêmes valeurs de $choix et $perpage ?
Qu'est-ce qui ne fonctionne pas correctement ? As-tu bien au moins un résultat si tu fais ta requête à la main avec les mêmes valeurs de $choix et $perpage ?
j'ai mis pour valeur 10 au deux variable et non rien ne s'affiche, mais pas d'erreur nno plus.
j'ai suivi un tuto (https://www.grafikart.fr/tutoriels/pagination-php-51 mais le souci est qu'il n'est pas en PDO et j'ai appris a partir de PDO et je ne souhaite pas revenir en arriere avec les anciennes méthodes (pardonnez moi)
j'ai suivi un tuto (https://www.grafikart.fr/tutoriels/pagination-php-51 mais le souci est qu'il n'est pas en PDO et j'ai appris a partir de PDO et je ne souhaite pas revenir en arriere avec les anciennes méthodes (pardonnez moi)
D'abord : le id dans
Ensuite, le PDO : tu as tout à fait raison de l'utiliser. Mais je te demandais si tu avais testé ta requête à la main avec les mêmes valeurs de $choix et $perpage, grâce à phpmyadmin par exemple. Car si tu n'as pas de message d'erreur, le plus probable est qu'il n'y a aucune réponse à ta requête. En effet, Tu as un WHERE id=1 : as-tu plus d'une dizaine d'enregistrement avec le même id ? Car si tu n'en as qu'un, ce qui semblerait normal, ton LIMIT 10,10 empêche de l'afficher.
Je suis tenté de dire que ton WHERE est en trop.
<a href="index.php?id=....correspond au id de $_GET['id']. Mais tu peux remplacer id par n'importe quel autre mot (je ne connais pas les règles précises, mais il ne faut sans doute pas d'espace par exemple. Tu peux remplacer id par toto à condition de le remplacer partout : dans l'url et dans le $_GET.
Ensuite, le PDO : tu as tout à fait raison de l'utiliser. Mais je te demandais si tu avais testé ta requête à la main avec les mêmes valeurs de $choix et $perpage, grâce à phpmyadmin par exemple. Car si tu n'as pas de message d'erreur, le plus probable est qu'il n'y a aucune réponse à ta requête. En effet, Tu as un WHERE id=1 : as-tu plus d'une dizaine d'enregistrement avec le même id ? Car si tu n'en as qu'un, ce qui semblerait normal, ton LIMIT 10,10 empêche de l'afficher.
Je suis tenté de dire que ton WHERE est en trop.
WHERE id=:id AND titre=:titre
Tu es sûr que ce AND titre=:titre a quelque chose à faire ici ? Ton id n'est pas unique ?
Et si tu maintiens ce :titre, il ne faut pas l'oublier dans l'array de l'execute
merci, je tiens au courant pour le resultat
@le père : que me suggères-tu ?
est-ce que j'ai une erreur autre que syntaxique (vu que de ce coté là tout va bien ??*
code :