[PHP , PDO , SQL] Fetch sur un prepare ???

Bonjour,

Je me demande vraiment pourquoi le code suivant ne marche pas, j'ai fait pas mal de recherches sur le Web pourtant :O
En fait, il s'agit d'un module de connexion... la première vérification consiste à savoir si l'identifiant existe, c'est pourquoi j'applique un fetchColumn() sur ma $requete...
La dernière vérification consiste en la concordance du mot de passe avec le pseudo... Et c'est là que ça coince. L'array que j'utilise ne comporte aucune donnée.

Appréciez :
$identifiant = $_POST['identifiant'];  
 $mot_de_passe = $_POST['mot_de_passe'];  
   
 $requete = sql()->prepare("SELECT * FROM membres WHERE identifiant = ?");  
 $requete->execute(array($identifiant));   

 if($requete->fetchColumn() == 0)  
  echo "L'identifiant renseigné n'existe pas.";  
    
 else  
 {  
  $array = $requete->fetch(); // NE MARCHE PAS :O AUCUNE ERREUR RETOURNEE
    
  if(md5($mot_de_passe) != $array['mot_de_passe'])  
   echo "Le mot de passe renseigné ne correspond pas.";  
     
  else    
   echo "Connexion réussie !";    
 }  


Pourriez-vous m'aider à débuguer ce script ?

Merci d'avance !

2 réponses

  1. Bonjour,

    A quoi correspond la fonction sql() ?

    Essayez de cette manière :
     $requete = sql()->prepare("SELECT * FROM membres WHERE identifiant = ?");  
     $requete->execute(array($identifiant));
    
     $donnees = $requete->fetch();
    
     if($donnees == 0)  
      echo "L'identifiant renseigné n'existe pas.";  
        
     else  
     {  
      if(md5($mot_de_passe) != $donnees['mot_de_passe'])  
        echo "Le mot de passe renseigné ne correspond pas.";  
         
      else    
        echo "Connexion réussie !";    
     }  
    1
    1. Bonjour,

      La fonction sql() correspond tout simplement à l'instanciation de PDO :
      function sql()
      {
      	try
      	{
      		$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
      		$bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '', $pdo_options);
      	}
      	catch (Exception $e)
      	{
      			die('Erreur : ' . $e->getMessage());
      	}
      	return $bdd;
      }


      Votre code marche parfaitement, je n'avais même pas pensé à faire ça xD
      Mais je trouve quand même bizarre qu'il soit impossible de cumuler un fetchColumn() avec un fetch()...

      Merci encore, bonne journée !
      0
      1. Je pense que c'est dû au fait qu'une fois un fetch réalisé, le curseur de votre $requete se place à la fin, et comme il n'y a qu'une seule entrée, un 2eme fetch n'est pas possible.
        0