Catch Zend PDO Exception

落爺英雄遲暮 提交于 2019-12-13 03:57:45

问题


I'm wondering if I can put a try catch about $application->bootstrap()->run();
that will catch pdo exceptions

This works, but it catches every exception, which I do not want.

try {
    $application->bootstrap()->run();
} catch (Exception $e) {
    print_r($e);
}

I had a nasty incident of pdo exception being throw and displaying the password from application.ini!

Worthy of note, I have tried PDOException, it doesnt get catched.

My DB is set up in bootstrap run() with

    try {
        $db = $this->getPluginResource('db')->getDbAdapter();
        Zend_Registry::set('dbAdapter', $db);
    } catch (Exception $e) {
        echo 1;exit;
    }

Note that if I put in the wrong password locally and run the app, I do not see 1, I see a blank page even with error reporting on.


回答1:


Go where you have the database code and put try catch around that code. If you want only Pdo Exceptions then catch only PdoException. Put something like catch(PdoExcetion_OR_What_Its_Name_Is $e) (And disable the error output to the screen. Write your errors to a log file)




回答2:


if i understand the question correctly , it mean you are trying to catch you db connection exception

and this would be as easy as these lines below :

try {
    $db = Zend_Db::factory('Pdo_Mysql', $parameters);
    $db->getConnection();
} catch (Zend_Db_Adapter_Exception $e) {
    // perhaps a failed login credential, or perhaps the RDBMS is not running
} catch (Zend_Exception $e) {
    // perhaps factory() failed to load the specified Adapter class
}

basically getConnection function is trying to connect to db with the parameters , if it failed it would throw an Zend_Db_Adapter_Exception and if succesfully connected it would return PDO object

similarly , you can use this pattern to catch you Zend_Db exceptions or PDO_Exceptions in controller classes or models that throw these kind of errors , but not the whole application




回答3:


It seems rather strange to try and catch a whole application. Disabling error reporting (such as display_errors in php.ini) would be a lot better to stop revealing any sensitive information from uncatched exceptions.

But to answer your question:

try {
    $application->bootstrap()->run();
} catch (PDOException $e) {
    print_r($e);
}

This should catch only PDO Exceptions.



来源:https://stackoverflow.com/questions/4345274/catch-zend-pdo-exception

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!