如何获取执行select语句ZF2的Exception

时间:2015-08-29 14:05:21

标签: php exception pdo zend-framework2

我在使用ZF2和DbAdapter时出现问题。

我正在制作一个select语句,并在发生错误时尝试异常。

我在块中的select语句尝试... 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();
        }

1 个答案:

答案 0 :(得分:0)

Reivaldo,欢迎来到stackoverflow!

由于Zend DB驱动程序使用自定义语句实例,PDO抛出的异常和其他可能的错误在内部处理,并在必要时转换为Zend\Db\Adapter\Exception个实例。

查看this example

不要在代码中捕获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.
}

您可能还想阅读一些关于exception handling的文档。