Как получить Исключение при выполнении оператора select ZF2

1

У меня проблема с ZF2 и DbAdapter.

Я делаю инструкцию select и пытаюсь получить исключение, когда произойдет некоторая ошибка.

У меня есть оператор select внутри блока try... catch... но проблема в том, что когда я устанавливаю "неправильный запрос", исключение не выбрасывается.

Здесь мое обслуживание:

return array(
    'db' => [
        'driver' => 'Pdo',
        'dsn' => 'mysql:dbname=my_dbname;host=localhost',
        'username' => 'root',
        'password' => 'root',
        'driver_options' => [
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'',
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ]
    ],
    'service_manager' => array(
        'factories' => array(
            'Zend\Db\Adapter\Adapter' => function ($serviceManager) {
                $adapterFactory = new Zend\Db\Adapter\AdapterServiceFactory();
                $adapter = $adapterFactory->createService($serviceManager);

                \Zend\Db\TableGateway\Feature\GlobalAdapterFeature::setStaticAdapter($adapter);

                return $adapter;
            }
        ),
    ), 

);

Здесь мой запрос:

try {
            $db = $this->getServiceLocator()->get('Zend\Db\Adapter\Adapter');
            $sql = "SELECT * FROM 'table'";
            $statement = $db->query($sql);
            $res = $statement->execute();
        } catch (PDOException $e) {
            echo $e->getMessage();
        }
Теги:
exception
pdo
zend-framework2

1 ответ

0

Reivaldo, добро пожаловать в stackoverflow!

Поскольку драйверы Zend DB используют пользовательские экземпляры инструкций, исключения, вызванные PDO, и другие возможные ошибки, обрабатываемые внутренне, и при необходимости конвертируются в экземпляры Zend\Db\Adapter\Exception.

Проверьте этот пример.

Вместо того, чтобы ловить PDOException в вашем коде, всегда улавливайте возможные исключения от наиболее специфического до самого общего. Это хорошая практика.

Например:

try {
    // code to throw exceptions
} catch (\Zend\Db\Adapter\Exception $e) {
    echo $e->getMessage();
} catch (\Exception $e) {
    // This is not an adapter exception, anyway its an exception.
    echo $e->getMessage();
} finally {
    // This block always executed, an exception thrown or not.
}

Вы также можете прочитать некоторую документацию об обработке исключений.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню