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

dodvega -  
afrnos Messages postés 61 Statut Membre -
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. afrnos Messages postés 61 Statut Membre 16
     
    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
  2. dodvega
     
    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. afrnos Messages postés 61 Statut Membre 16
       
      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