Обработка ошибок
В отличии от стандартных средств PHP, когда после каждого запроса и подключения нужно было проверять коды ошибок и возвращаемый результат (или не проверять, пустив всё на самотек), goDB в случае ошибки генерирует исключение.
Чем полезны и приятны исключения, можно узнать в статье «обработка исключений в PHP». Здесь же приведем только их иерархию и описание.

goDBException
Базовый класс для всех исключений goDB
try {
Application.Run();
} catch (goDBException $e) {
echo "Что-то случилось с БД";
} catch (Exception $e) {
echo "Что-то случилось с чем-то другим";
}
goDBExceptionConnect
Ошибка подключения к серверу БД или выбора базы. Единственное исключение библиотеки, которое может возникать на отлаженном проекте. И единственное исключение, которое следует перехватывать, чтобы вывести пользователю красивую страничку с сообщением об ошибке.
Все остальные исключения возникают из-за ошибок в коде и должны давиться на этапе разработки.
try {
$db = new goDB($host, $login, $password, $dbname);
} catch (goDBExceptionConnect $e) {
echo "Сервер не дышит";
}
goDBExceptionQuery
Ошибка при выполнении запроса. Объект исключения позволяет получить информацию о запросе:
try {
$db->query("select * from `table`", null, "assoc"); // Допустим таблица `table` не существует
} catch (goDBExceptionQuery $e) {
echo "Ошибка запроса: ".$e->error();
echo "Код ошибки: ".$e->errno();
echo "Запрос, вызвавший ошибку: ".$e->query();
}
goDBExceptionData
Неверная пара шаблона и входных данных.
При использовании простых (не именованных) плейсхолдеров, их количество в шаблоне должно чётко соответствовать количеству входных данных.
$db->query('INSERT INTO `table` VALUES (?,?,?)', array(1,2)); // goDBExceptionDataNotEnough: данных не хватает
$db->query('INSERT INTO `table` VALUES (?,?,?)', array(1,2,3,4)); // goDBExceptionDataMuch: лишние данные
Именованные плейсхолдеры не обязаны соответствовать всех ключам входного массива.
Если же указанного в плейсхолдере ключа не существует, генерируется goDBExceptionDataNotEnough.
$struct = array('a' => 1, 'b' => 2, 'c' => 3);
$db->query('INSERT INTO `table` SET `a`=?:a, `b`=?:b', $struct); // Всё нормально, "c" указывать не обязательно
$db->query('INSERT INTO `table` SET `a`=?:a, `d`=?:d', $struct); // goDBExceptionDataNotEnough: нет ключа "d"
Одновременное использование простых и именованных плейсхолдеров в одном запросе не допустимо.
$db->query('INSERT INTO `table` SET `a`=?:a, `b`=?', $data); // goDBExceptionDataMixed
Неизвестный плейсхолдер (а также именованный без указания имени) вызывает goDBExceptionDataPlaceholder
$db->query('INSERT INTO `table` SET ?unkonwn'); // неизвестный плейсхолдер
$db->query('INSERT INTO `table` SET `x`=?i:'); // двоеточие есть, а имени нет
goDBExceptionFetch
Ошибочный формат представления результата.
goDBExceptionFetchUnknown: вообще неизвестный.
goDBExceptionFetchUnexpected: не соответствует запросу. Например assoc после INSERT.
goDBExceptionDB
Производные от этого исключения (goDBExceptionDBAlready и goDBExceptionDBNotFound) могут возникнуть при работе с пространством имен.
Более подробно об этом можно узнать в «разделе о пространстве имен».