Comportement à observer en cas d'erreur de mysql

Comportement à observer en cas d'erreur de mysql - PHP - Programmation

Marsh Posté le 15-04-2009 à 09:11:14    

Bonjour,
Ça parait tellement bête comme question, mais en faite c'est bien plus compliqué que çà en à l'air  [:jimbotte]  
J'aimerais savoir quoi faire en cas d'erreur de mysql. Je vois partout des or die(mysql_error()) et j'ai toujours trouvé çà nul.
Je souhaite faire quelquechose d'assez user-friendly, mais je n'ai pas d'idées. Qu'est ce que vous faites, vous en cas d'erreur du SGBD (échec d'une connexion ou d'une requête, par exemple) ?
Merci !

Reply

Marsh Posté le 15-04-2009 à 09:11:14   

Reply

Marsh Posté le 15-04-2009 à 09:42:30    

hello, fais toi une classe pour tes requêtes sql

Reply

Marsh Posté le 15-04-2009 à 09:48:00    

oui mais en cas d'erreur ?
 
Je procède comment ?

Reply

Marsh Posté le 15-04-2009 à 10:36:47    

ca depen ce que tu veux, si tu veux que ca t'affiche genre juste "erreur" avec un beau logo, ou alors l'erreur mais nommer autrement dans un joli cadre

Reply

Marsh Posté le 15-04-2009 à 11:21:39    

Je souhaiterais savoir si je dois interrompre le reste de la procédure, si je dois afficher une page spéciale, jusqu'où les détails techniques peuvent-ils être affichés, etc.
Merci de ton aide

Reply

Marsh Posté le 15-04-2009 à 11:54:35    

je te conseillerai de passer sous PDO en premier lieu, tu pourras geré suivant le type d'erreur, plus facielement
 
sinon sous sous le mysql, c'est affichage de l'erreur dans une div + affichage du footer + die,  le tout dans une fonction ou dans une classe
 

Reply

Marsh Posté le 15-04-2009 à 12:08:50    

Au moment de l'erreur il n'y a en théorie aucune sortie donc je peux peut-être afficher un TPL smarty dédié aux erreurs de bdd.

Reply

Marsh Posté le 15-04-2009 à 13:52:20    

Toutes les erreurs SQL ont une criticité différente, un insert d'un compteur de visualisation n'a pas la même gravité d'une erreur de selection de base de donnée.
 
C'est pourquoi le mieux est de passer par des exceptions que tu try catch selon les niveau de criticité des traitements.

Reply

Marsh Posté le 15-04-2009 à 14:00:14    

ok
Je vais voir çà, merci !

Reply

Marsh Posté le 15-04-2009 à 15:01:51    

Perso je recommande

 

1) Faire sa classe perso de requetes sql
2) en cas de mysql_error ou de non connexion, logger les requetes & scripts correspondants
3) dans ce cas balancer un header 503, recharger sous 5 sec, et faire un die

 

Utile uniquement quand tu es en mutualisé, depuis 1 an que je suis en dédié je n'ai plus aucune erreur de connexion / ni erreurs sql

 

Après tu peux étendre le concept à toutes tes applications :)

 

ah j'oubliais également que tu peux logger les requetes les plus longues
en placant un compteur entre chaque et déterminer si une requete est supérieure à 30ms etc..

 


Message édité par grosbin le 15-04-2009 à 15:05:24

---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Marsh Posté le 15-04-2009 à 15:01:51   

Reply

Marsh Posté le 15-04-2009 à 15:05:30    

A noter qu'en phase de production on évitera de balancer les messages d'erreurs vers le client. Pas la peine de lui donner des informations, potentiellement sensibles, sur la structure des données.
 
Sinon +1 pour gérer au cas par cas. Toutes les requêtes ne sont pas forcément indispensable.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 15-04-2009 à 15:18:22    

Merci à tous.

Reply

Marsh Posté le 15-04-2009 à 15:20:14    

dwogsi a écrit :


Sinon +1 pour gérer au cas par cas. Toutes les requêtes ne sont pas forcément indispensable.


+1
Pour ma part, pour les erreurs "bloquantes", je redirige (header()) vers une page qui affiche un message d'erreur et qui propose divers liens vers l'accueil, la page précédente, ...
Le message d'erreur et toutes les infos intéressantes sont, avant ça, inscrites dans un log pour les développeurs / administrateurs.


---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed