SELECT COUNT erroné
Résolu/Fermé2 réponses
jordane45
Messages postés
38347
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
24 décembre 2024
4 719
Modifié le 25 avril 2022 à 22:10
Modifié le 25 avril 2022 à 22:10
Bonjour,
Pour commencer, vu que tu fais du PDO, merci d'activer l'affichage des erreurs PDO dans la connexion à ta BDD et à placer chaque requête que tu fais dans un bloc TRY/CATCH ( comme dans l'exemple ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs )
Ensuite, vu que ta requête n'est sensée remonter qu'une seule ligne de résultat, il ne faut pas faire de boucle pour la parcourir.. juste un fetch suffit.
Enfin, afin de voir ce qui pourrait être erroné dans ta requête .. fais en un ECHO et testes la DIRECTEMENT dans ta bdd via phpmyadmin par exemple.
Pour commencer, vu que tu fais du PDO, merci d'activer l'affichage des erreurs PDO dans la connexion à ta BDD et à placer chaque requête que tu fais dans un bloc TRY/CATCH ( comme dans l'exemple ici : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs )
Ensuite, vu que ta requête n'est sensée remonter qu'une seule ligne de résultat, il ne faut pas faire de boucle pour la parcourir.. juste un fetch suffit.
Enfin, afin de voir ce qui pourrait être erroné dans ta requête .. fais en un ECHO et testes la DIRECTEMENT dans ta bdd via phpmyadmin par exemple.
$q = []; $params = []; //récupération PROPRE des variables AVANT de les utiliser. // pour cela, j'utilise l'écriture ternaire ( sorte de if/else ) $categories = !empty( $_POST['categorie']) ? $_POST['categorie'] : NULL; //if ( isset ($_POST['categorie']) && !empty($_POST['categorie'])) // !empty fait déjà un isset .. il en faut donc pas mettre les deux ! if( $categories) { $q[] = 'FIND_IN_SET(categorie,?)'; $params[] = implode(',', $categories); } $where = !empty($where_terms) ? 'WHERE ' . implode(' AND ',$q) : "" ; $sql = "SELECT COUNT(*) as number_of_rows FROM articles $where"; //-----------------------------------------------------------// // Le temps des tests pour voir si ta requête fonctionne // dans phpmyadmin echo "<br>Requete :" . $sql; echo "<br> Avec la paramètres :<br>"; print_r($params); //------------------- fin des tests ---------------------// try{ $stmt = $pdo->prepare($sql); $stmt->execute($params); }catch(Exception $e){ echo "Erreur : " . $e->getMessage(); } $number_of_rows = $stmt->fetchColumn(); // quand tu n'as qu'une seule colonne à récupérer : https://www.php.net/manual/fr/pdostatement.fetchcolumn.php