Retour requete UPDATE via pdo

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonsoir à tous,

J'ai dans mon code un simple update effectué via pdo:

 'UPDATE matable SET member_hash = ? WHERE member_login = ? AND member_pass = ?' 
Sachant que la requete peut ne pas aboutir pour plusieurs raisons (login ou mdp introuvable, hash introuvable ou nouveau hash identique a l'ancien), je souhaiterais savoir si il y a moyen de connaitre la clause qui n'a pas pu etre respectée dans la requete, le seul retour possible que j'ai pu trouvé est un rowCount et celui-ci indique seulement le nombre de ligne mise a jour, ce qui n'est pas tres parlant...
La requete se deroulant bien meme si aucune ligne n'est modifiee, aucun code ou message d'erreur n'est retourné.

D'avance merci a vous

+++ Spangenhelm +++

4 réponses

  1. .Zoro. Messages postés 285 Statut Membre 33
     
    normalement

    si tu fait un update
    c'est que tu connais deja ton membre

    dont pour ce qui est du login ou mot de passe
    fait une requete select et compare les resultats

    pareil pour savoir si le hash est pareil
    0
  2. Utilisateur anonyme
     
    Ok prenons un autre exemple:

    Dans une requete INSERT, un champ login et un champ email ont tous les deux une contrainte d'unicité (via sgbd) et l'un ou l'autre peuvent planter la requete (login ou/et email deja utiliser )
    La requete renvoie donc un code erreur pour les doublons, ici 23000 avec mysql mais rien ne dit de quel champ il s'agit voila mon probleme, donc impossible de dire a l'utilisateur: "pseudo deja pris" ou "email deja pris" puisque l'on ne sait pas lequel a renvoyé l'erreur ! Je souhaitais pouvoir etre plus precis qu'une simple phrase: "la requete a foirée" lol

    Merci pour les reponses.

    +++ Spangenhelm +++
    0
  3. .Zoro. Messages postés 285 Statut Membre 33
     
    pour ton exemple d'insert
    voici ce que je ferais

    ton utilisateur entre son login et son mail

    avec ceci
    on fait une requete contenant 2 sous-requetes
    exemple :

    $login = dupont;
    $mdp = password;

    $sql='
    SELECT
    (SELECT COUNT(login) FROM user WHERE login=?) AS nbLog
    (SELECT COUNT(pass) FROM user WHERE pass=?) AS nbPass
    FROM user';

    $requete = $pdo -> prepare ($sql);
    $requete->execute(array($login,$mdp));
    $data = $requete -> fetch();
    $i=0;

    if($data[nbLog'] != 0)
    {
    echo 'desolé, ce pseudo est deja pris !';
    $i++;
    }

    if($data['nbPass'] != 0)
    {
    echo 'desolé, ce mot de passe est deja pris !';
    $i++;
    }

    if($i==0)
    {
    echo 'vos identifiants sont uniques.';
    }
    0
  4. Utilisateur anonyme
     
    Merci Zoro, je pensais vraiment qu'il y avait plus simple snif...

    A bientot sur CCM

    +++ Spangenhelm +++
    0