2010-12-03 49 views
0

Je me demande si je peux mettre une prise d'essai au sujet $application->bootstrap()->run();
qui va attraper pdo exceptionsCatch Zend AOP Exception

Cela fonctionne, mais il attrape toutes les exceptions, que je ne veux pas. J'ai eu un incident désagréable de pdo exception étant lancer et afficher le mot de passe de application.ini!

Digne de remarque, j'ai essayé PDOException, il ne se fait pas attraper.

Mon DB est mis en place en terme d'amorçage() avec

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

Notez que si je mets dans le mauvais mot de passe localement et exécuter l'application, je ne vois pas 1, je vois une page blanche, même avec rapport d'erreurs sur.

Répondre

1

Allez où vous avez le code de la base de données et mettre essayer de contourner ce code. Si vous voulez seulement des exceptions de Pdo alors attrapez seulement PdoException. Mettez quelque chose comme catch (PdoExcetion_OR_What_Its_Name_Is $ e) (Et désactiver la sortie d'erreur à l'écran.) Écrivez vos erreurs dans un fichier journal)

+1

Mise à jour de mon message pour refléter ce que j'ai essayé par rapport à cela. – azz0r

+0

En savoir plus sur PdoException ici http://php.net/manual/fr/class.pdoexception.php – cristian

1

Il semble plutôt étrange d'essayer une application entière. Désactiver le signalement des erreurs (tel que display_errors dans php.ini) serait beaucoup mieux d'arrêter de révéler toute information sensible provenant d'exceptions non verrouillées.

Mais pour répondre à votre question:

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

Cela devrait prendre seulement les exceptions de PDO.

+0

PDOException ne retourne rien pour moi, même si je pensais qu'il devrait aussi. – azz0r

+0

Avez-vous défini PDO :: ATTR_ERRMODE pour lancer des exceptions? (http://www.php.net/manual/en/pdo.setattribute.php) – ViNce

2

si je comprends bien la question, cela signifie que vous essayez de vous attraper db exception de connexion

et ce serait aussi facile que ces lignes ci-dessous:

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 
} 

essentiellement getConnection fonction tente de connecter à DB avec les paramètres, si elle a échoué il lancerait un Zend_Db_Adapter_Exception et si elle est connectée avec succès, il reviendra PDO object

de même, vous Utilisez ce modèle pour vous attraper Zend_Db exceptions ou PDO_Exceptions dans les classes de contrôleur ou les modèles qui lancent ce type d'erreurs, mais pas toute l'application

+0

Cela ressemble plus à ça, malheureusement dans mon run bootstrap, j'ai $ db = $ this-> getPluginResource ('db') - > getDbAdapter(); Je n'ai pas d'appel à zend db, donc je peux personnaliser l'expérience pour essayer de l'attraper. – azz0r