| Latest |Kites |Pictures |Programming |Life |
![]() [filed under Programming]zend framework sql error reporting adapter ![]() This post is about Zend Framework, sql error reporting. Problem: Lets fix it so it shows the whole query. I found this neat class that reports the SQL, it work by extending the Zend_Db_Adapter_Pdo_Mysql class. I use MySQLi, so I adapted it so it works for me: class MyCompany_Db_Mysqli extends Zend_Db_Adapter_Mysqli
{ public function query($sql, $bind = array()) { try { return parent::query($sql, $bind); } catch (Exception $e) { if( $this->getProfiler()->getEnabled() ) { echo '<span style="color: red; font-size: 20px;">MyCompany_Db_Mysqli adapter Error</span>';
echo '<div style="font-family: monospace; padding: 10px; margin: 10px; border: 2px solid pink;">'; echo nl2br($sql); echo '<hr>'; echo '<pre>'; echo var_dump($bind); echo '<pre>'; echo '</div>'; } else { // no profiler throw $e; } } } } The whole thing is a little bit quick and dirty. I wanted to see if it worked and post a blog entry about if it did. You need to save the file into your library code (replace MyCompany with your library directory name) in the Db directory. To use it you want to find where you load your database adapter, I do this in my controller init() function. My init() looks like this: class ProjectsController extends Zend_Controller_Action
{ // // this is called from __construct // public function init() { parent::init(); $config = new Zend_Config_Ini('/var/www/ZF-apps/config.ini', 'general'); //$db = Zend_Db::factory($config->projects->db); $db = new Guava_1_Db_Mysqli($config->projects->db->params); $db->getProfiler()->setEnabled(true); Zend_Db_Table::setDefaultAdapter($db); ... ... Note how I have commented out how I used to get my adapter. Also see how the params are loaded from an .ini file and used slightly differently. How to use it: You'll want to add your own logic into the adapter so it emails off the error report (or pasts it into an RSS feed or something)
Comments [30th of Apr, 2009 @ 03:53 PM] joseph said: You can also get this info in your stack trace - check out this post: http://www.edmondscommerce.co.uk/blog/zend-framework/zend-framework-more-detailed-stack-trace/ [10th of Mar, 2010 @ 01:34 AM] Sammie said: Can you give a little more detail on how to set this up. For example what the file should be called with the new Class? I saved it as Mysqli.php and placed it in Zend/Db/ but no matter what I do, it's not loading. |
| Server Grind [0.0097 seconds] |