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

Fermé
dodvega - Modifié par dodvega le 11/02/2012 à 17:50
afrnos Messages postés 59 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 12 avril 2012 - 13 févr. 2012 à 09:53
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

afrnos Messages postés 59 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 12 avril 2012 16
12 févr. 2012 à 05:48
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
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
afrnos Messages postés 59 Date d'inscription mercredi 26 novembre 2008 Statut Membre Dernière intervention 12 avril 2012 16
13 févr. 2012 à 09:53
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