PHP try / catch i fatal error

Używam następującego skryptu do korzystania z bazy danych przy użyciu PHP:

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

Teraz chcę użyć tego uchwytu bazy danych do wykonania żądania przy użyciu tego kodu:

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

Oto problem:

Gdy połączenie z bazą danych jest OK, wszystko działa,Gdy połączenie się nie powiedzie, ale nie korzystam z bazy danych, mam$GLOBALS['errors'][] tablica i skrypt nadal działa,Gdy połączenie z bazą danych nie powiedzie się, otrzymuję następujący błąd krytyczny:

Uwaga: Niezdefiniowana zmienna: db w C :ampamp htdocs [...] test.php w linii 32

Błąd krytyczny: wywołanie funkcji składowej prepare () na obiekcie nie będącym obiektem w C :ampamp htdocs [...] test.php w linii 32

Uwaga: Linia 32 to$query = $db->prepare(...) instrukcja.

Oznacza to, że skrypt ulega awarii, a try / catch wydaje się być bezużyteczny. Czy wiesz, dlaczego ten drugi try / catch nie działa i jak go rozwiązać?

Dzięki za pomoc!

EDYTOWAĆ: Jest kilka naprawdę dobrych odpowiedzi. Sprawdziłem, który nie jest dokładnie tym, co chciałem zrobić, ale jest to prawdopodobnie najlepsze podejście.

questionAnswers(7)

yourAnswerToTheQuestion