Bonjour,
Le
or die() était une solution relativement acceptable si tu ne désires pas avoir une gestion des erreurs plus élaborées.
Tu peux également utiliser la fonction
trigger_error() qui génère une erreur utilisateur. Ensuite, tu peux utiliser la fonction
set_error_handler() pour spécifier une fonction qui va gérer de manière automatique toutes les erreurs générées par
trigger_error().
function handler( $errno, $errstr, $errfile, $errline) {
printf('<br />Erreur #%u: %s<br />Fichier: %s<br />Ligne %u', $errno, $errstr, $errfile, $errline);
exit; // À toi de dire si tu veux quitter ou pas
}
set_error_handler('handler');
$res = pg_query('bidon') or trigger_error('Impossible de récupérer bidon');
$res2 = pg_query('bidon2') or trigger_error('Impossible de récupérer bidon2');
?>
La fonction
set_error_handler() peut également gérer les erreurs générées par pgsql_query():
<?php
function handler( $errno, $errstr, $errfile, $errline) {
printf('<br />Erreur #%u: %s<br />Fichier: %s<br />Ligne %u', $errno, $errstr, $errfile, $errline);
exit; // À toi de dire si tu veux quitter ou pas
}
set_error_handler('handler');
pg_query('bidon');
pg_query('bidon2');
?>
Tu peux également procéder ainsi étant donné que les erreurs générées par pg_query() sont de type E_WARNING:
<?php
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
if (FALSE === ($res = pg_query('bidon'))) {
exit('Impossible de récupérer bidon');
}
if (FALSE === ($res2 = pg_query('bidon2'))) {
exit('Impossible de récupérer bidon2');
}
?>
Ou encore mieux, utiliser les exceptions (PHP5)
Il ne faut pas oublier de considérer ceci:
- Si une erreur est générée lors de la première requête, est-ce que cela va affecter ma 2e requête lors de son exécution?
- Sont-elles dépendantes les unes aux autres?
- Devrais-je continuer à exécuter mes requêtes malgré une erreur lors de la précédente?
Il est important de prévoir les résultats d'une erreur et ainsi prévenir une réaction en chaîne sur les autres requêtes alors que ce n'est évidemment pas désirée.