je sais que cette erreur est courante mais dans mon cas je pense c'est different et j'espere que vous allez pouvoir m'aider!
je veux filtrer par rapport à la session d'un Admin et je vois si l'adminitrateur n'a pas de publication j'ai butté sur cette erreur "Call to a member function fetchAll() on bool" par conte s'il en a elle me retourne le resultat!
mon code:
//Trouver les articles et les catégories avec la pagination en fonction de la session de l' ADM et retourner les resultats
public function findPaginatedSession($session){
$paginated = new Paginated(
" SELECT post.id, post.name, post.content, post.created_at, users.username
FROM post
INNER JOIN users
ON post.session_admin = users.id
WHERE publier = '0' AND post.session_admin = $session
ORDER BY post.created_at DESC",
"SELECT COUNT(id) FROM {$this->table}"
);
$post = $paginated->getItems($this->class);
(new CategoryTable($this->pdo))->hydratePost($post);
return [$post , $paginated];
}
// Rechercher les articles avec la pagination
public function getItems($classMapping): array
{if($this->items === null){
$currentPage = Url::getPositiveInt('page', 1);
$page = $this->getPage();
if($currentPage > $page){
throw new \Exception("Cette page n'existe pas");
}
$offset = $this->perPage * ($currentPage -1);
return $this->items = $this->pdo->query(
$this->query .
" LIMIT {$this->perPage} OFFSET $offset")
->fetchAll(PDO::FETCH_CLASS, $classMapping);
}
return $this->items;
}
/// Rechercher les categorie a partir d'id des articles trouver//
public function hydratePostSess(array $post){
$postById = [];
foreach($post as $posts){
$posts->setCategories([]);
$postById[$posts->getId()] = $posts;
}
$categorie = $this->pdo
->query('SELECT c.*, pc.post_id
FROM post_category pc
JOIN category c ON c.id = pc.category_id
WHERE pc.post_id IN (' . implode(',', array_keys($postById)) . ')
')->fetchAll(PDO::FETCH_CLASS, $this->class); /// elle m'a indiqué que l'erreur se trouve ici
foreach($categorie as $category){
$postById[$category->getPostId()]->addCategory($category);
}
}
je sais que cette erreur est courante mais dans mon cas je pense c'est different et j'espere que vous allez pouvoir m'aider!
je veux filtrer par rapport à la session d'un Admin et je vois si l'adminitrateur n'a pas de publication j'ai butté sur cette erreur "Call to a member function fetchAll() on bool" par conte s'il en a elle me retourne le resultat!
mon code:
//Trouver les articles et les catégories avec la pagination en fonction de la session de l' ADM et retourner les resultats
public function findPaginatedSession($session){
$paginated = new Paginated(
" SELECT post.id, post.name, post.content, post.created_at, users.username
FROM post
INNER JOIN users
ON post.session_admin = users.id
WHERE publier = '0' AND post.session_admin = $session
ORDER BY post.created_at DESC",
"SELECT COUNT(id) FROM {$this->table}"
);
$post = $paginated->getItems($this->class);
(new CategoryTable($this->pdo))->hydratePost($post);
return [$post , $paginated];
}
// Rechercher les articles avec la pagination
public function getItems($classMapping): array
{if($this->items === null){
$currentPage = Url::getPositiveInt('page', 1);
$page = $this->getPage();
if($currentPage > $page){
throw new \Exception("Cette page n'existe pas");
}
$offset = $this->perPage * ($currentPage -1);
return $this->items = $this->pdo->query(
$this->query .
" LIMIT {$this->perPage} OFFSET $offset")
->fetchAll(PDO::FETCH_CLASS, $classMapping);
}
return $this->items;
}
// Rechercher les categorie a partir d'id des articles trouver
public function hydratePostSess(array $post){
$postById = [];
foreach($post as $posts){
$posts->setCategories([]);
$postById[$posts->getId()] = $posts;
}
$categorie = $this->pdo
->query('SELECT c.*, pc.post_id
FROM post_category pc
JOIN category c ON c.id = pc.category_id
WHERE pc.post_id IN (' . implode(',', array_keys($postById)) . ')
')->fetchAll(PDO::FETCH_CLASS, $this->class); /// elle m'a indiqué que l'erreur se trouve ici
foreach($categorie as $category){
$postById[$category->getPostId()]->addCategory($category);
}
}
Bonjour,
Le problème se situe probablement au niveau de la requête executée via "$this->pdo->query".
Comme dit la doc : "PDO::query() retourne un objet PDOStatement, ou FALSE si une erreur survient. "
Du coup appeler une quelconque methode à partir de FALSE (donc un Bool...) ben ça fonctionne pas trop bien...
Bonjour.
Le plus simple, c'est qu'au lieu de chainer les méthodes query
et fetchAll
, tu devris plutôt stocker le retour de la méthode query
dans une variable, selon sa valeur, soit tu retournes false ou alors tu retournes le résultat de la méthode fetchAll
.
Exemple :
$query = $this->pdo->query("{$this->query} LIMIT {$this->perPage} OFFSET $offset");
if ($query !== false) {
return $query->fetchAll();
}
return $query; // Qui dans ce cas là vaut false