PDO::ERRMODE_SILENT
Это режим по умолчанию. PDO просто установит код ошибки, который можно проверить с помощью методов PDO::errorCode() и PDO::errorInfo() для операторов и объектов базы данных. Если ошибка возникает из-за вызова объекта оператора, вы можете вызвать метод PDOStatement::errorCode() или PDOStatement::errorInfo() этого объекта. Если ошибка вызвана вызовом объекта базы данных, то для объекта базы данных можно вызвать два вышеуказанных метода.
PDO::ERRMODE_WARNING
Помимо установки кода ошибки, PDO также отправит традиционное сообщение E_WARNING. Этот параметр полезен во время отладки/тестирования, если вы просто хотите увидеть, что происходит не так, не прерывая работу вашего приложения.
PDO::ERRMODE_EXCEPTION
Помимо установки кода ошибки, PDO также генерирует класс исключения PDOException и устанавливает его свойства, отражающие код ошибки и информацию об ошибке. Этот параметр также очень полезен во время отладки, поскольку он эффективно увеличивает точку сценария, в которой произошла ошибка, позволяя очень быстро выявить потенциальные проблемные области в коде (помните: если исключение приводит к завершению сценария, транзакция автоматически откатывается).
Еще одна очень полезная особенность режима исключений заключается в том, что вы можете создать собственную обработку ошибок более четко, чем традиционные предупреждения в стиле PHP, и он требует меньше кода, чем тихий режим, и явно проверяет возвращаемое значение каждого вызова базы данных /Less.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';try { $dbh = новый PDO($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) { echo 'Не удалось установить соединение: ' $e->getMessage();}?>
Примечание. Независимо от того, установлен ли PDO::ATTR_ERRMODE в данный момент, PDO::__construct() всегда будет генерировать исключение PDOException в случае сбоя соединения. Неперехваченные исключения фатальны.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* Использование try/catch вокруг конструктора по-прежнему работает, даже если установлен ERRMODE ВНИМАНИЕ, поскольку PDO::__construct всегда будет генерировать исключение PDOException в случае сбоя соединения. */try {$dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo 'Ошибка соединения: ' $. e->getMessage(); выход;}//Это приведет к тому, что PDO выдаст E_WARNING ошибка уровня, а не исключение (когда таблица данных не существует) $dbh->query("ВЫБРАТЬ неправильный столбец ИЗ неправильной таблицы");?>
Приведенная выше процедура выведет:
Предупреждение: PDO::query(): SQLSTATE[42S02]: базовая таблица или представление не найдены: 1146 Таблица «test.wrongtable» не существует в /tmp/pdo_test.php в строке 18добавьте примечание добавьте примечание