77 votes

CodeIgniter - comment attraper les erreurs DB ?

Y a-t-il un moyen de faire CI lancer un exception lorsqu'il rencontre un Erreur de DB au lieu d'afficher un message comme :

Une erreur de base de données s'est produite Numéro d'erreur : 1054 Colonne 'foo' inconnue dans la clause 'where' SELECT * FROM ( FooBar ) OÙ foo = '1'

REMARQUE : je ne veux que cela se produise que dans un seul contrôleur. Dans les autres contrôleurs, je suis content qu'il affiche l'élément Messages d'erreur de la DB .

85voto

Oskenso Kashi Points 995

Essayez ces fonctions de CI

$this->db->_error_message(); (mysql_error equivalent)
$this->db->_error_number(); (mysql_errno equivalent)

MISE À JOUR POUR CODEIGNITER 3

Les fonctions sont obsolètes, utilisez error() à la place :

$this->db->error();

4 votes

Et lorsque les requêtes sont créées de manière dynamique, $this->db->last_query() utile aussi.

9 votes

Comment empêcher l'affichage des messages ?

8 votes

Vous devez désactiver le débogage pour la base de données dans config/database.php -> $db['default']['db_debug'] = FALSE ;

42voto

RayJ Points 667

Peut-être ça :

$db_debug = $this->db->db_debug; //save setting

$this->db->db_debug = FALSE; //disable debugging for queries

$result = $this->db->query($sql); //run query

//check for errors, etc

$this->db->db_debug = $db_debug; //restore setting

0 votes

Ceci a beaucoup aidé lors de l'utilisation du pilote pdo pour psql

1 votes

@RayJ Une idée de la raison pour laquelle la valeur par défaut de db_debug 'production' ENVIRONMENT ( 'db_debug' => (ENVIRONMENT !== 'production' ) est défini comme FALSE dans les CI v3 ? fraîchement téléchargés. Je vois qu'en le mettant à false, l'erreur de base de données sera plus détaillée, ce qui n'est pas prévu en production, n'est-ce pas ? Je suis confus.

0 votes

Tout d'abord, nous devons revenir au fichier principal index.php et voir comment ENVIRONMENT est défini et pourquoi. stackoverflow.com/questions/36051146/ Comme nous le savons tous, on peut définir ce paramètre comme suit : define('ENVIRONMENT', 'development') : pour afficher les erreurs pendant le développement. define('ENVIRONMENT', 'production') : lorsque le site est en ligne. Ainsi, la ligne (dans la configuration de database.php) dit : 'db_debug' => (ENVIRONMENT !== 'production'), Ou Définir le mode de débogage de la base de données à VRAI si "ENVIRONMENT" n'est pas défini à "production".

32voto

CodeGodie Points 723

Dans Codeigniter 3.0 (CI3), tout ce que vous avez à faire est de $this->db->error()

Si vous avez besoin d'obtenir la dernière erreur qui s'est produite, la méthode error() renvoie un tableau contenant son code et son message.

http://www.codeigniter.com/user_guide/database/queries.html#handling-errors

1 votes

Merci. Ils ne mentionnent pas cela dans leur guide de migration CI 2 -> 3 !

1 votes

Merveilleux, vous avez sauvé ma journée Je le faisais encore à partir de l'IC 2

1 votes

Codeigniter arrête l'exécution du code et produit un message d'erreur en cas d'erreur, vous n'aurez donc pas la possibilité de vérifier $this->db->error. Cette réponse est incorrecte.

17voto

Kabir Hossain Points 324

Vous devez désactiver le débogage pour la base de données dans config/database.php ->.

$db['default']['db_debug'] = FALSE;

C'est mieux pour la sécurité de votre site web.

2 votes

Vous vivez dans un monde parallèle ?

0 votes

@jerinho.com lol :)

12voto

tlogbon Points 176

Je sais que ce fil est vieux, mais juste au cas où quelqu'un d'autre aurait ce problème. Voici une astuce que j'ai utilisée sans toucher aux classes CI db. Laissez votre débogage activé et dans votre fichier d'affichage des erreurs, lancez une exception.

Donc, dans la configuration de votre base de données, vous avez :

$db['default']['db_debug'] = true;

Ensuite, dans votre fichier d'affichage des erreurs de la base de données, le mien est dans application/errors/error_db.php remplacer tout le contenu par ce qui suit :

<?php
$message = preg_replace('/(<\/?p>)+/', ' ', $message);
throw new Exception("Database error occured with message : {$message}");

?>

Puisque le fichier de vue sera appelé, l'erreur sera toujours levée en tant qu'exception, vous pouvez par la suite ajouter différentes vues pour différents environnements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X