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. En platine, je veux bien.
    Mais ne la fait pas trop grande parce que ... : Masse volumique = 21 090 kg/m³
    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. // 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. 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. Erreu de ma part :
            $req = mysql_query($sql) or die('Erreur dans <em>“'.$sql.'”</em> :<br/>'.mysql_query()); 
            → Mets plutot mysql_error()
            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. 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. 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. 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);
                    ...
                    ?>