PHP try / catch et erreur fatale

J'utilise le script suivant pour utiliser une base de données à l'aide de PHP:

try{
    $db = new PDO('mysql:host='.$host.';port='.$port.';dbname='.$db, $user, $pass, $options);
}
catch(Exception $e){
    $GLOBALS['errors'][] = $e;
}

Maintenant, je veux utiliser cette base de données manche pour faire une demande à l'aide de ce code:

try{
    $query = $db->prepare("INSERT INTO users (...) VALUES (...);");
    $query->execute(array(
        '...' => $...,
        '...' => $...
    ));
}
catch(Exception $e){
    $GLOBALS['errors'][] = $e;
}

Voici le problème:

  • Lors de la connexion à la DB est OK, tout fonctionne,
  • Lorsque la connexion échoue, mais je n'utilise pas la DB, j'ai l' $GLOBALS['errors'][] tableau et le script est encore en cours d'exécution par la suite,
  • Lors de la connexion à la DB a échoué, j'obtient l'erreur fatale:

Notice: Undefined variable: db en C:\xampp\htdocs[...]\test.php sur la ligne 32

Erreur fatale: Appel à un membre de la fonction prepare() sur un non-objet dans C:\xampp\htdocs[...]\test.php sur la ligne 32

Remarque: la Ligne 32 est le $query = $db->prepare(...) instruction.

C'est-à-dire, le script se bloque, et le try/catch semble être inutile. Savez-vous pourquoi cette deuxième try/catch ne fonctionne pas et comment le résoudre?

Merci pour l'aide!

EDIT: Il y a vraiment de bonnes réponses. J'ai validé un qui n'est pas exactement ce que je voulais faire, mais qui est probablement la meilleure approche.

source d'informationauteur Ploppe