IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Problème avec requete count [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Points : 66
    Points
    66
    Par défaut Problème avec requete count
    Bonjour, j'ai un souci avec de code qui compte le nombre de lignes retournés selon une clause where.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try {
    		 //Pagination
         $query = $connect_db->prepare('SELECT COUNT(*) FROM article WHERE      titreart LIKE %"'.$mot.'"% OR article LIKE %"'.$mot.'"%');
     $query->execute();
         $total = $query->rowCount();
    }
    		catch(PDOException $e){
    			echo $e->getMessage();
    		}
    Erreur retourné:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQLSTATE[42000]: Syntax error or access violation: 1064 Erreur de syntaxe près de '%"tic"% OR article LIKE %"tic"%' à la ligne 1

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 45
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Les % sont mal placés, à l'intérieur des quotes il faut les mettre.

    Ensuite évite si tu le peux d'utiliser rowCount pour un select : utilisation de rowCount

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT COUNT(*) AS nb_article FROM article WHERE      titreart LIKE "%'.$mot.'%" OR article LIKE "%'.$mot.'%"

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'SELECT COUNT(*) FROM article WHERE      titreart LIKE "%'.$mot.'%" OR article LIKE "%'.$mot.'%"'
    les % doivent entré dans la chaine

  4. #4
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Points : 66
    Points
    66
    Par défaut
    J'ai résolution une partie du problème mais un autre demeure.
    Le résultat affiche toujours 1 ligne alors que le terme rechercher se trouve dans plusieurs articles.

    Le code complet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    try {
    		 //Pagination
    		 $query = $connect_db->prepare('SELECT COUNT(*) FROM article WHERE titreart LIKE "%'.$mot.'%" OR article LIKE "%'.$mot.'%"');
    		 $query->execute();
    		 $total = $query->rowCount();
    		}
    		catch(PDOException $e){
    			echo $e->getMessage();
    		}
     
    		 $msgpage= 10; // Nombre de message qui s'affiche par page
    		$nombreDePages=ceil($total/$msgpage);
     
    		if(isset($_GET['page'])){
    			 $pageActuelle=intval($_GET['page']);
     
    			 if($pageActuelle>$nombreDePages){
    				  $pageActuelle=$nombreDePages;
    			 }
    		}
    		else {
    			 $pageActuelle=1;
    		}
     
    		$premiereEntree=($pageActuelle-1)*$msgpage;
     
    		$sqlRech = 'SELECT * FROM article WHERE titreart LIKE "%'.$mot.'%" OR article LIKE "%'.$mot.'%" ORDER BY idart DESC LIMIT '.$premiereEntree.', '.$msgpage.'';
    		$sqlRech = $connect_db->prepare($sqlRech);
    		$sqlRech->execute();
    		$pageActuelle_plus1 = $pageActuelle+1;
    		$pageActuelle_moin1 = $pageActuelle-1;
     
    	}
    L'affichage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    <?php
           if(!isset($erreur)){
               if($total == 0){
                  echo '<div style="width: 722px; border-bottom: 1px solid #999; margin-bottom:5px;"><b>R&eacute;sultat de la recherche:'.$mot.': '.$total.' &eacute;l&eacute;ments trouv&eacute;s</b></div>';
                  echo '<div><b>Aucun résultat ne correspond à votre recherche</b></div>';
                 }
     
    	else if($total == 1){
    	  echo '<div style="width: 722px; border-bottom: 1px solid #999; margin-bottom:5px;"><b>R&eacute;sultat de la recherche '.$mot.': '.$total.' &eacute;l&eacute;ment trouv&eacute;</b></div>';
              $dataRech = $sqlRech->fetch(PDO::FETCH_OBJ);
    	?>
             <div style="margin-bottom:-5px;"><a href="<?php echo "article-".$dataRech->idart."-".$dataRech->alias.".html"?>" title="Lire"><?php echo $dataRech->titreart?></a></div>
             <div style="width: 722px;"><?php echo nl2br(substr($dataRech->article,0,200))?></div>
            <div><?php
    		$sqldomaine = "SELECT * FROM domaine WHERE iddomaine=".$dataRech->domaine;
    		$sqldomaine = $connect_db->prepare($sqldomaine);
    		$sqldomaine->execute();
    		$dataDomaine = $sqldomaine->fetch(PDO::FETCH_OBJ);
    	      ?>
                    <a href="#"><?php echo $dataDomaine->titre; ?></a>
              </div>
    	 <?php 
          }
     
          else {
                echo '<div style="width: 722px; border-bottom: 1px solid #999; margin-bottom:5px;"><b>R&eacute;sultat de la recherche:'.$mot.': '.$total.' &eacute;l&eacute;ments trouv&eacute;s</b></div>';
     
                 while($dataRech = $sql->fetch(PDO::FETCH_OBJ)){?>
                   <div style="margin-bottom:-5px;"><a href="<?php echo "article-".$dataRech->idart."-".$dataRech->alias.".html"?>" title="Lire"><?php echo $dataRech->titreart?></a></div>
                    <div style="width: 722px;"><?php echo nl2br(substr($dataRech->article, 0,200))?></div>
                   <div><?php
                          $sqldomaine = "SELECT * FROM domaine WHERE iddomaine=".$dataRech->iddomaine;
                          $sqldomaine = $connect_db->prepare($sqldomaine);
                          $sqldomaine->execute();
    									   ?>
                         <a href="#"><?php echo $dataDomaine->titre; ?></a>
                   </div>
     
            <?php 
    		}
    		 }
    	}
         else {
                echo $erreur;
       }
    ?>

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2009
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 736
    Points : 1 101
    Points
    1 101
    Par défaut
    Où se trouve la boucle qui affiche les lignes

  6. #6
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Points : 66
    Points
    66
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php 
    echo '<div style="width: 722px; border-bottom: 1px solid #999; margin-bottom:5px;">
    <b>R&eacute;sultat de la recherche:'.$mot.': '.$total.' &eacute;l&eacute;ments trouv&eacute;s</b></div>';
     
       while($dataRech = $sql->fetch(PDO::FETCH_OBJ)){?>
                   <div style="margin-bottom:-5px;"><a href="<?php echo "article-".$dataRech->idart."-".$dataRech->alias.".html"?>" 
                    title="Lire"><?php echo $dataRech->titreart?></a></div>
     
                    <div style="width: 722px;"><?php echo nl2br(substr($dataRech->article, 0,200))?></div>
                    <div><?php
                          $sqldomaine = "SELECT * FROM domaine WHERE iddomaine=".$dataRech->iddomaine;
                          $sqldomaine = $connect_db->prepare($sqldomaine);
                          $sqldomaine->execute();
    		      ?>
                         <a href="#"><?php echo $dataDomaine->titre; ?></a>
                   </div>
     
            <?php 
    } ?>

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Points : 98
    Points
    98
    Par défaut
    C'est normal, ton select récupère le nombre de lignes et renvoie UN SEUL résultat. Ton rowCount renverra donc toujours 1, même s'il n'y a aucun résultat (COUNT(*) renverra toujours quelque chose, même si c'est 0).

  8. #8
    Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Points : 66
    Points
    66
    Par défaut
    Merci Meyfarth, une galère pour ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $query = ('SELECT idart FROM article WHERE titreart LIKE "%'.$mot.'%" OR article LIKE "%'.$mot.'%"');
    $query = $connect_db->prepare($query);
    $query->execute();
    $total = $query->fetchAll();
    $total = count($total);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Problême avec un COUNT sur un template
    Par Vinuto dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/06/2007, 16h37
  2. Problème de requete, COUNT, GROUP BY etc.
    Par TheRedLed dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/05/2007, 15h03
  3. problème de requete: COUNT() multiples
    Par nicolemans72 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/02/2007, 10h06
  4. [SQL] Problème avec SELECT COUNT(*)
    Par jpascal dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/11/2006, 12h37
  5. [ACCESS][SQL] Problème avec requete SQL ...
    Par mpascolo dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/11/2005, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo