Retour requete UPDATE via pdo

[Résolu/Fermé]
Signaler
-
 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

Messages postés
263
Date d'inscription
mardi 17 août 2010
Statut
Membre
Dernière intervention
8 mai 2020
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

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 +++
Messages postés
263
Date d'inscription
mardi 17 août 2010
Statut
Membre
Dernière intervention
8 mai 2020
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.';
}

Merci Zoro, je pensais vraiment qu'il y avait plus simple snif...

A bientot sur CCM

+++ Spangenhelm +++