Echec d'un try catch sous postgresql

Fermé
Nelinroft - 4 avril 2014 à 23:31
Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 - 8 avril 2014 à 13:28
Bonsoir à tous, je suis actuellement étudiant en informatique et je dois réaliser un petit projet web avec des scripts php et de la bdd sous postgresql. Il est donc nécessaire d'utiliser des pg_fonction().


Pour introduire mon problème : j'ai une table client avec un champ pseudo et le pseudo, même s'il n'est pas clé primaire doit être unique. Il faut donc vérifier lors d'une nouvelle inscription qu'un pseudo identique n'est pas déjà présent dans la bdd.


Et là, y'a deux écoles ! La mienne et celle des autres ^^'
Celle des autres : On teste toutes les entrées une à une avec une boucle, des conditions et surtout plusieurs pg_fonction(). Ca marche mais ça prend 5 ~ 6 lignes selon comment on rédige et puis tout le monde le fait.
La mienne : Je pose une contrainte d'unicité sur le champ pseudo, je tente une insertion, si le pseudo existe déjà, ça plante et sur le principe, ça doit renvoyer une erreur.


Je me dis qu'avec ma méthode, il n'y a besoin d'aucun test et d'aucune bouble, juste une pg_fonction() et un try catch. Si le pseudo existe, l'insertion plante, le sgbdr renvoie une erreur mais la fonction un bool, donc une question : est-ce pour ça que ça catch pas ?
Aussi et si la réponse à la question précédente est positive du coup, avez vous l'idée d'une autre alternative qui resterait dans le même esprit ?


Voila ma fonction :
try {
$result = pg_query($dbcon, "INSERT INTO client (pseudo) VALUES ('Vincenty')");
} catch (Exception $e) {
echo $e->getMessage();
}


D'avance merci pour vos réponses et votre aide.
Cordialement
Nelinroft

1 réponse

Meoran Messages postés 1562 Date d'inscription vendredi 28 août 2009 Statut Membre Dernière intervention 8 avril 2015 204
Modifié par Meoran le 8/04/2014 à 13:31
Non le système d'exception n'est pas applicable dans ton cas d'utilisation pour une simple et bonne raison que l'extension pour postgresql (avec les fonctions du type pg_... que tu utilises ici) ne lance pas d'exception.

Si ca plante, "false" est retourné mais aucune exception n'est lancée, il est donc impossible d'en attraper une via le bloc "try...catch".

Une solution serait d'utiliser PDO avec la gestion des extension activée, mais pour moi la solution de tester avant si il y en a déjà un existant est de loin la meilleure et le plus propre des méthodes.
0