Probleme de synthaxe PDO

Fermé
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 - 22 sept. 2013 à 21:05
 Utilisateur anonyme - 24 sept. 2013 à 00:03
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 :
<?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

Utilisateur anonyme
22 sept. 2013 à 21:32
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 :

$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)
0
Utilisateur anonyme
22 sept. 2013 à 21:52
Je remarque après coup :
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
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
Modifié par gintoxic le 22/09/2013 à 23:49
je vais testé cette concaténation et voir ma "syntaxe" :) (amalgame avec synthèse)

merci, je tiens au courant pour le resultat

@le père : que me suggères-tu ?
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
23 sept. 2013 à 00:20
il y a comme un souci dans ta concaténation (je viens de remarqué :
$comptage = $bdd->prepare("SELECT titre,chapitre FROM saga WHERE id=:id AND titre=:titre LIMIT ('.$page_curr-1)*$perpage.", $perpage");
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
23 sept. 2013 à 00:32
bon je viens de faire ce code mais rien à faire pour que ça fonctionne correctement
est-ce que j'ai une erreur autre que syntaxique (vu que de ce coté là tout va bien ??*
code :
<?php 
require_once('conf/connexion_bdd.php');
echo '<h1>'.$data['titre'].'</h1>';
$choix = (($page_curr-1)*$perpage);
$nb_mark =strlen($data['chapitre']);
$perpage= 6500;
$nbpage = ceil($nb_mark/$perpage);
$page_curr = 1;
try{
$comptage = $bdd->query("SELECT chapitre FROM saga WHERE id=1 LIMIT $choix, $perpage");
$data = $comptage->fetch();

echo $data['chapitre'];
}catch(PDOException $e){
die('erreur : '.$e->getMessage());
}

for($i=1; $i<=$nbpage; $i++){
echo $i.' / ';
}

?>
0
Utilisateur anonyme
23 sept. 2013 à 09:31
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 ?
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
23 sept. 2013 à 19:17
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)
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
23 sept. 2013 à 20:04
est-ce que dans :
<a href="index.php?id=....

"id" a une quelconque importance ? on peut mettre le mot que l'on vet ou non ?
et à quoi correspond le id dans $_GET['id'] ???

merci pour ces petites précisions
0
Utilisateur anonyme
24 sept. 2013 à 00:03
D'abord : le id dans
<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.
0