Я использую следующий скрипт для использования базы данных с помощью PHP:
try{
$db = new PDO('mysql:host='.$host.';port='.$port.';dbname='.$db, $user, $pass, $options);
}
catch(Exception $e){
$GLOBALS['errors'][] = $e;
}
Теперь я хочу использовать этот дескриптор базы данных для выполнения запроса с помощью этого кода:
try{
$query = $db->prepare("INSERT INTO users (...) VALUES (...);");
$query->execute(array(
'...' => $...,
'...' => $...
));
}
catch(Exception $e){
$GLOBALS['errors'][] = $e;
}
Вот проблема:
- Когда соединение с БД в порядке, все работает,
- Когда соединение терпит неудачу, но я не использую БД, у меня есть массив
$GLOBALS['errors'][]
и скрипт все еще работает после этого, - Когда соединение с БД завершилось неудачно, я получаю следующую фатальную ошибку:
Примечание. Неопределенная переменная: db в C:\xampp\htdocs [...]\test.php в строке 32
Неустранимая ошибка: вызовите функцию-член prepare() для не-объекта в C:\xampp\htdocs [...]\test.php в строке 32
Примечание. Строка 32 - это команда $query = $db->prepare(...)
.
То есть, сценарий падает, а try/catch кажется бесполезным. Вы знаете, почему эта вторая попытка/уловка не работает и как ее решить?
Спасибо за помощь!
EDIT: Есть действительно хорошие ответы. Я подтвердил то, что не совсем то, что я хотел сделать, но это, вероятно, лучший подход.