Pagination réorganisation

Par tsaromino, il y a 3 ans


Bonjour

J'ai un soucis de syntaxe dans mon code pourtant je n'aie pas l'impression d'avoir un soucis...

Sur mon navigateur j'ai cette erreur :

SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' . 4' at line 1

Je suis a 13:57 de la vidéo :
https://grafikart.fr/tutoriels/tp-pagination-refactor-php-1170#autoplay

Mon fichier src/PaginatedQuery.php

<?php namespace App; use \PDO; class PaginatedQuery { private $query; private $queryCount; private $classMapping; private $pdo; private $perPage; public function __construct(string $query, string $queryCount, string $classMapping, ?\PDO $pdo = null, int $perPage = 12) { $this->query = $query; $this->queryCount = $queryCount; $this->classMapping = $classMapping; $this->pdo = $pdo ?: Connection::getPDO(); $this->perPage = $perPage; } public function getItems(): array { $currentPage = URL::getPositiveInt('page', 1); $count = (int)$this->pdo ->query( $this->queryCount) ->fetch(PDO::FETCH_NUM)[0]; $pages = ceil($count / $this->perPage); if ($currentPage > $pages) { throw new Exception('Cette page existe pas'); } $offset = $this->perPage * ($currentPage - 1); return $this->pdo->query( $this->query . " LIMIT {$this->perPage} OFFSET $offset ") ->fetchAll(PDO::FETCH_CLASS, $this->classMapping); } }

Mon fichier views/category/show.php

<?php use App\Connection; use App\Model\{Category, Post}; use App\PaginatedQuery; $id = (int)$params['id']; $slug = $params['slug']; $pdo = Connection::getPDO(); $query = $pdo->prepare(('SELECT * FROM category WHERE id = :id')); $query->execute(['id' => $id]); $query->setFetchMode(PDO::FETCH_CLASS, Category::class); /** @var Category|false */ $category = $query->fetch(); //dd($post); // si aucun article est trouver if ($category === false) { throw new Exception('Aucune catgéforie ne correspont à cet ID'); } // Permet de rediriger l'url vers le bon slug if ($category->getSlug() !== $slug) { $url = $router->url('category', ['slug' => $category->getSlug(), 'id' => $id]); http_response_code(301); header('Location ' . $url); } $title = "Catégorie {$category->getName()}"; $paginatedQuery = new PaginatedQuery( "SELECT p.* FROM post p JOIN post_category pc ON pc.post_id = p.id; WHERE pc.category_id = {$category->getID()} ORDER BY created_at DESC ;", "SELECT COUNT(category_id) FROM post_category WHERE category_id = ' . {$category->getID()}", Post::class ); /** @var Post[] */ $posts = $paginatedQuery->getItems(); dd($posts); $link = $router->url('category', ['id' => $category->getID(), 'slug' => $category->getSlug()]); ?> <h1> <?= $title; ?> </h1> <div class="row"> <?php foreach ($posts as $post) : ?> <div class="col-md-3"> <?php require dirname (__DIR__) . '/post/card.php' ?> </div> <?php endforeach ?> </div> <div class="d-flex justify-content-between my-4"> <?php if ($currentPage > 1) : ?> <?php $link = $router->url('home'); $l = $link; if ($currentPage > 2 ) $l = $link . '?page=' . ($currentPage - 1); ?> <a href="<?= $l ?>" class="btn btn-primary">&laquo; Page précédente </a> <?php endif ?> <?php if ($currentPage < $pages ): ?> <a href="<?= $link ?>?page=<?= $currentPage + 1 ?>" class="btn btn-primary"> Page suivante </a> <?php endif ?> </div>

L'image de l'erreur sur mon navigateur :

https://www.zupimages.net/viewer.php?id=23/15/sfjh.png

10 réponses

Carouge10, il y a 3 ans

bonjour

relis la requête en question. tu as des caractères en trop

tsaromino, il y a 3 ans

je ne voit pas le caracter en trop honnetement sur cetet requete

$currentPage = URL::getPositiveInt('page', 1);
$count = $this->pdo->query($this->queryCount)
->fetch(PDO::FETCH_NUM)[0];

Carouge10, il y a 3 ans

ce n'est pas cette ligne qui pose soucis.
c'est celle avec sélect

tsaromino, il y a 3 ans

Mais dans quel page le select ? show.php ?

Carouge10, il y a 3 ans

dans quel code tu as un SELECT COUNT.... ?
ligne 38 je crois d'après ton sujet sur le forum ocr

tsaromino, il y a 3 ans

Mon select count est dans la page views/category/show.php à la ligne 44

l'erreur a la ligne 38 ets dans le fichier src/PaginatedQuery.php

Carouge10, il y a 3 ans

sauf que php t'indique toujours la dernière erreur rencontrolé et pas forcément là où elle est vraiment

"SELECT COUNT(category_id) FROM post_category WHERE category_id = ' . {$category->getID()}"

cette requête est fausse

tsaromino, il y a 3 ans

Merci tu est un genie ;) je chercher depuis ce matin ...

Carouge10, il y a 3 ans

de rien, n'oublie pas de passer le sujet en résolu

tsaromino, il y a 3 ans

c'est fait merci