SELECT COUNT erroné

Résolu/Fermé
Temp - Modifié le 25 avril 2022 à 21:18
 Temp - 27 avril 2022 à 15:20
Bonsoir,

Que je fasse
$number_of_rows = $stmt -> rowCount(); 
ou
SELECT COUNT(*) 
, ma requête me retourne un compte erroné : soit 1, soit 2, soit 19 ou 20 maximum, alors que le nombre d'entrées correspondant devrait être de 50 minimum selon la catégorie choisie.


var categorie= new Array();
$("input[name='categorie']:checked").each(function(i)
{ categorie.push($(this).val());
});
// Code posté vis $.ajax


 $q = [];
 $params = [];

if ( isset ($_POST['categorie']) && !empty($_POST['categorie']))     
 {  $q[] = 'FIND_IN_SET(categorie,?)';
     $params[] =  implode(',', $_POST['categorie']);    
 }

$where = '';
if  ( !empty($where_terms))
    {  $where = 'WHERE ' . implode(' AND ',$q);    
 }

$count = "SELECT COUNT(*) as number_of_rows FROM articles $where";
$stmt = $pdo->prepare($count);
 $stmt->execute($params); 
 while($row =$stmt -> fetch(PDO::FETCH_ASSOC))
 { $number_of_rows =$row['number_of_rows'];}


Je ne percute pas sur ce qui cloche,
Merci pour votre aide.

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
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.


$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



0
Merci Jordane.
Ok, C'est bon. ✓
0