Discussion:
intercepter proprement les fatales erreurs.
(trop ancien pour répondre)
Etienne
2011-10-20 09:28:07 UTC
Permalink
Salut

Je traite des données que j'insère dans une base de données,
parfois la donnée que j'insère le génère une fatal erreur lors de
l'ecriture dans la base de données.

PHP Fatal error: INSERT INTO ...

Au final le script s'arrète.
Je souhaite traiter proprement cette erreur. mais je ne peut pas car le
script s'interrompt...

Etienne
Jean Francois Ortolo
2011-10-20 09:46:21 UTC
Permalink
Post by Etienne
Salut
Je traite des données que j'insère dans une base de données,
parfois la donnée que j'insère le génère une fatal erreur lors de
l'ecriture dans la base de données.
PHP Fatal error: INSERT INTO ...
Au final le script s'arrète.
Je souhaite traiter proprement cette erreur. mais je ne peut pas car le
script s'interrompt...
Etienne
Suggesion :

C'est une erreur PHP, pas une erreur MySQL.

Faut voir le code. ;)

Bien amicalement.

Jean François Ortolo
franssoa
2011-10-20 09:56:06 UTC
Permalink
Post by Jean Francois Ortolo
Post by Etienne
PHP Fatal error: INSERT INTO ...
Au final le script s'arrète.
Je souhaite traiter proprement cette erreur. mais je ne peut pas car le
script s'interrompt...
C'est une erreur PHP, pas une erreur MySQL.
Oui, Jean Francois a raison, c'est surement une erreur php (genre une
chaine sans guillemets, ou autre).

Sinon, pour intercepter les erreurs, tu peux voir à :
http://php.net/manual/fr/language.exceptions.php

franssoa
Olivier Masson
2011-10-21 08:01:31 UTC
Permalink
Post by franssoa
http://php.net/manual/fr/language.exceptions.php
franssoa
Quel est l'intérêt de try catch par rapport à un trigger_error utilisé
avec set_error_handler.
J'utilise la 2nd technique, et on m'a dit que c'était puant (ici même il
me semble) sans trop d'explications - le développeur considère toujours
que ce qu'il a appris n'est qu'axiome et que toute autre proposition est
forcément erronée, donc la discussion constructive est rarement possible -)
Mickaël Wolff
2011-10-22 01:59:42 UTC
Permalink
Post by Olivier Masson
Quel est l'intérêt de try catch par rapport à un trigger_error utilisé
avec set_error_handler.
Si tu me permets, la question est maladroite. trigger_error est
plutôt l'équivalent de throw, et set_error_handler l'équivalent du try
catch.
Post by Olivier Masson
J'utilise la 2nd technique, et on m'a dit que c'était puant (ici même il
me semble) sans trop d'explications - le développeur considère toujours
que ce qu'il a appris n'est qu'axiome et que toute autre proposition est
forcément erronée, donc la discussion constructive est rarement possible -)
Oh non, ici c'est clairement une question de préférence, et l'usage
de l'une ou l'autre technique, voir la combinaison des deux, est une
affaire de goût.

Historiquement, puisque PHP est un langage procédural, il n'y avait
pas de notion d'exception comme il y en a dans les langages orientés
objet. Donc il y a le mécanisme d'enregistrement des erreurs avec
trigger_error. C'est le système qui est intégré à PHP de base, et qui
est donc la voie naturelle de traitement des erreurs. Et vu que les
mécanismes d'erreur de base sont basés dessus, il est incontournable.

Les exceptions sont venues avec l'intégrations des fonctionnalités
orientées objet dont elles font partie. Et ce, sans s'y substituer. Le
mécanisme d'exception a deux avantages sur la gestion par le système
d'erreurs natif :

- la gestion de l'erreur peut être plus facilement déléguée, elle n'a
pas besoin d'être gérée immédiatement
- l'exception peut comporter une charge sémantique qui va faciliter
le traitement de l'erreur (si l'exception est une erreur)

Personnellement je préfère les exceptions, car on peut déléguer la
gestion d'erreur à un niveau d'abstraction supérieur, qui va décider de
ce qu'il faut faire.
Olivier Masson
2011-10-24 09:26:32 UTC
Permalink
Post by Mickaël Wolff
Personnellement je préfère les exceptions, car on peut déléguer la
gestion d'erreur à un niveau d'abstraction supérieur, qui va décider de
ce qu'il faut faire.
Quelle différence avec trigger_error/set_error_handler ?

C'est vraiment confus pour moi. D'autant plus que dans la doc PHP, ils
utilisent en exemple set_error_handler pour transformer les erreurs en
exceptions.
Mickaël Wolff
2011-10-25 00:17:43 UTC
Permalink
Post by Olivier Masson
Quelle différence avec trigger_error/set_error_handler ?
J'aurais dû mal à faire plus clair que l'explication que j'ai donné.
Post by Olivier Masson
C'est vraiment confus pour moi. D'autant plus que dans la doc PHP, ils
utilisent en exemple set_error_handler pour transformer les erreurs en
exceptions.
Les exceptions ne sont pas le mécanisme de gestion d'erreurs
historique. Donc, si on veut un système de gestion unifié des erreurs en
utilisant les exceptions, il faut lever des exceptions depuis le handler
d'erreur personnalisé. D'où la recette donnée dans la documentation.

Je suis de ceux qui considèrent le mécanisme historique de gestion
des erreurs comme n'étant pas pratique par rapport à l'usage des exceptions.


class my_file_with_exception
[
function open()
{
// tentative
// on a une erreur:
throw new my_file_exception('Permission') ;
}
}

class my_file_exception extends exception { }

class my_file_classic
[
function open()
{
// tentative
// on a une erreur:
trigger_error('Permission') ;
return false ;
}
}

$f = new my_file_exception;
try
{
$f->open();
}
catch (my_file_exception $e)
{
// on peut gérer l'erreur facilement
}

$f = new my_file_classic;
$f->open();
// S'il y a eu une erreur, on ne peut pas la traiter facilement sans
// utiliser de variable globale, ou en faisant gérer l'erreur par la
// classe responsable de la gestion du fichier
Olivier Masson
2011-10-25 09:34:12 UTC
Permalink
Post by Mickaël Wolff
$f = new my_file_classic;
$f->open();
// S'il y a eu une erreur, on ne peut pas la traiter facilement sans
// utiliser de variable globale, ou en faisant gérer l'erreur par la
// classe responsable de la gestion du fichier
Ok, cet exemple est parlant. Merci pour tes efforts d'éclaircissement.
Continuer la lecture sur narkive:
Loading...