Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonsoir,
j'ai une table avec un champ unique (le pseudo d'un membre pour l'exemple),
donc si je tente un insert() avec un pseudo qui est déjà en base, j'ai le droit à une belle exception,
seulement voilà, elle ne me sert absolument à rien !
Dans mes rêves les plus fou, il y aurait un moyen de récupérer la colonne qui a fait éclater l'exception, et je n'aurait qu'a en conclure que "ce pseudo existe déjà" et ainsi afficher une gracieuse erreur à mon utilisateur.
Au lieu de ça, Zend_Db_Exception me retourne ça :
Mysqli statement execute error : Duplicate entry 'coucou2' for key 3
Plus tous l'objet Zend_Db_Statement_Mysqli_Exception qui ne contient rien d'utile (pas même un code d'erreur).
A par parser le message de l'exception (BEURK!) je vois pas comment faire ?
Pour info mon code :
try { $valueArray = array("USR_USERNAME" => $name); $rows_affected = $db->insert("FF_USR", $valueArray); $db->commit(); } catch (Zend_Db_Exception $e) { $db->rollBack(); echo "<pre>"; print_r( $e ); echo "</pre>"; echo $e->getMessage(); }
Voilà ça serait génial qu'une solution existe pour faire ce que je veux, c'est à dire savoir exactement d'ou vient l'exception, et ça sans devoir parser le message pour deviner qu'en faite, c'est le pseudo qui est dupliqué... d'autant qu'il pourrait s'agir aussi de l'email etc...
Merci d'avance !
Hors ligne
Salut,
je ne sais pas si les codes d'erreurs sont différenciés pour Zend_Db_Exception mais tu pourrais tenter un
$e->getCode();
Analyser un entier, c'est clair que c'est quand même mieux qu'une chaîne
sinon, tu peux aussi tenter un count de ta colonne et vérifier si c'est supérieur à 0
$sql = $db->quoteInto(' SELECT count(USR_USERNAME) FROM `FF_USR` WHERE USR_USERNAME= ?', $name ); $result = $db->query($sql)->fetchColumn(); if ($result>0){ //bla bla }
Hors ligne
Merci pour ta réponse !
Malheureusement le getCode() me renvoi un int(0)...
Peut être à cause de MySQL ? Ou de l'adaptateur mysqli ? Je ne sais pas.
Quoi qu'il en soit je fais effectivement comme tu me le propose, à savoir une requete SQL en amont pour vérifier que tel ou tel valeur n'existe pas déjà... mais ça me fait deux requêtes en plus et ma clé unique dans mysql ne sert plus à rien : bref c'est pas du tout une solution élégante (mais pour le moment ça marche).
@+
Hors ligne
Et pourquoi pas un INSERT .... ON DUPLICATE KEY UPDATE ... ?
Hors ligne
Pages: 1