Bonjour Marc,
Voilà comment intercepter des erreurs SQL pour afficher des messages
compréhensibles à tes utilisateurs si ton niveau de debug est à 0 :
public function onError()
{
if(Configure::read('debug') < 1)
{
// Afficher une page d'erreur :
$this->requestAction('/pages/db_fatal_error');
}
exit;
}
A mettre dans "app/app_controller.php" et bien entendu, il faut créer
la vue "db_fatal_error" et la mettre au bon endroit !
Ensuite, pour les requêtes custom ne pas utiliser "execute()" qui est
dépréciée, mais seulement "query()".
Mais je ne sais pas trop comment récupérer le code d'erreur SQL pour
pouvoir personnaliser le message.
Toutefois, habituellement, dans Cake on fait :
---------------------------------------------------------
if ($this->Model->save($this->data)) {
// Traitement en cas de succès
}
else {
// Message d'erreur
}
--------------------------------------------------------
Tu peux donc faire aussi :
------------------------------------------------------------
if ($this->Model->query('ma_query')) {
// Traitement en cas de succès
}
else {
// Message d'erreur
}
-------------------------------------------------------------
Après je pense qu'il doit y avoir une manière de récupérer le message
d'erreur SQL via une méthode de modèle, mais j'ai pas cherché...
En tout cas, une chose est sûre : tu dois mettre tes contraintes dans
la base !
On 16 juin, 11:13, Marc MENDEZ <[EMAIL PROTECTED]> wrote:
> Bonjour,
>
> J'avais trouvé une discussion sur le forum cakePHP anglais concernant
> l'interception des erreurs SQL, mais la conversation a viré au règlement
> de compte et aux us et coutumes sur Internet...
>
> Donc, voici ma question :
>
> Comment traiter efficacement l'unicité d'une information. Les exemples
> que j'ai pu trouver font, en gros, un findByxxxx pour vérifier que
> l'élément n'existe pas déjà dans la base de données avant de l'insérer
> ou de la mettre à jour.
> Ce système est bien entendu limité, car, la probabilité, sur certains
> informations, qu'au moins deux utilisateurs saisissent la même au même
> moment, n'est pas mince. Surtout suivant certaines informations.
> Donc, si on met en place des contraintes d'unicité dans la BDD
> (éventuellement en complément de l'autre solution), comment intercepter
> **proprement** les erreurs Sql ?
>
> J'en viens donc également à la deuxième partie du sujet de cette
> discussion : si je suis amené à utiliser les query() et autre execute(),
> comment traiter proprement les erreurs SQL retournées ? Par proprement,
> j'entends que certaines erreurs, prévisibles, doivent être interceptées
> par l'application et être affiché à l'utilisateur en clair clair.
>
> Merci
--~--~---------~--~----~------------~-------~--~----~
Groupe "Cakephp-fr".
Adresse : [email protected]
Pour résilier : [EMAIL PROTECTED]
Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr
-~----------~----~----~----~------~----~------~--~---