SELECT COUNT & PHP

Résolu
Bonjour,

J'ai un problème pour PHP renvoie la valeur correcte d'un comptage dans une BDD MySQL.
Voici mon code:
$sql= mysql_query("SELECT count (*) FROM Profils WHERE mail='$mail'");

alors que ma requête sous PhpMyAdmin marche très bien et renvoie le bon résultat:
SELECT count (*) FROM Profils WHERE mail='Un Truc'.

J'ai essayé les mysql_result, les mysql_fetch_array et autres joyeuseries, ca fait deux jours que je ne trouve pas de solution...

Merci d'avance.
Configuration: Windows Vista
Firefox 3.5.3

9 réponses

  1. Essaye avec ça :
    <?php
    ...
    $sql = 'SELECT COUNT(*) AS `nb` FROM `profils` WHERE `mail`="'.$mail.'"';
    $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query());
    $data = mysql_fetch_assoc($req);
    $nb = $data['nb'];
    ...
    ?>
    Il y a aussi une seconde méthode :
    <?php
    ...
    $sql = 'SELECT * FROM `profils` WHERE mail="'.$mail.'"';<
    $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query());
    $nb = mysql_num_rows($req);
    ...
    ?>
    1. Bonjour avion,

      Merci pour tes propositions qui me semblent tout ce qu'il y a de plus juste, pourtant les deux me renvoient des erreurs:

      Erreur dans “SELECT * FROM `profils` WHERE mail="truc@machin.fr"” :

      Pourtant l'écriture de données ne pose aucun problème... Un truc m'échappe vraiement.
      1. C'est peut-être (même sûrement) parce que j'ai mis "profils" en minuscules.
        Je te conseil de renommer ta table en minuscule plutôt que de mettre une majuscule à la requête.
        1. Il y avait en effet un problème de majuscules, merci.

          En revanche, le count est erronné; il me retourne aucune valeur alors qu'elles y sont, ce qui conduit à une tentative infructueuse d'inscription (doublon table primaire) et à un feedback erroné. Je met mon bout de code:

          // Checkmail
          $sql = 'SELECT * FROM `Profils` WHERE mail="$mail"';
          $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query());
          $nb = mysql_num_rows($req);

          echo 'Il y a ' . $nb . ' valeurs<br>';

          // Test Regex Mail
          if(preg_match('`^:alnum:([-_.]?:alnum:)+_?@:alnum:([-.]?:alnum:)+\.[a-z]{2,4}$`',$mail))
          {
          $mailok=1;
          }
          ...
          // Vérif pwd
          if ($pwd1 == "" OR $pwd2 == "")
          ...

          // Check Pwd équivalents
          if($pwd1!=$pwd2){
          ...

          // Si mail Ok et pas de doublons, inscription bdd
          if ($nb==0 AND $mailok==1) {
          1. Erreu de ma part :
            $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query()); 
            → Mets plutot mysql_error()
            1. En effet, merci.

              Par contre ca ne changera pas le problème de comptage...

              Je ne vois pas ce qui plante dans mon code php...
              1. // Checkmail
                $sql = 'SELECT * FROM `Profils` WHERE mail="$mail"';
                $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query());
                $nb = mysql_num_rows($req);
                
                echo 'Il y a ' . $nb . ' valeurs<br>'; 
                Le comptage n'est par erronné : Entre apostrophes, les variables ne sont pas remplacées par leur valeur, contrairement aux guillemées. Voici donc la ligne corrigée :
                $sql = 'SELECT * FROM `Profils` WHERE mail="'.$mail.'"'; 
                1. Cher camarade,

                  Ta statue, je te la fais en or ou en platine ?
                  Encore merci d'avoir été aussi didactique et patient. Vraiment bon esprit.
                  1. En platine, je veux bien.
                    Mais ne la fait pas trop grande parce que ... : Masse volumique = 21 090 kg/m³