2008-12-01 5 views
3

Existe-t-il un moyen de faire une trace de la pile pour afficher toute l'instruction SQL générée lorsqu'il y a une erreur à la place des premiers caractères?zend trace de la pile du framework

C'est ce qu'il affiche actuellement

... \ Zend \ Db \ Adapter \ Aop \ Abstract.php (220): Zend_Db_Adapter_Abstract-> query ('diction UPDATE » ...', Array)

..et Je voudrais voir toute la déclaration de mise à jour avant envoyé à la dB pour suivre ce qui est mal avec elle.

Merci pour l'aide. SWK

+0

je ne sais pas la réponse à cela, mais il est celui qui me dérange aussi. – smack0007

Répondre

12

Si vous voulez voir l'instruction SQL complète, vous pouvez utiliser Zend_Debug. Par exemple, si votre instruction SQL dans la variable $ sélectionner et que vous voulez voir l'instruction SQL complète, vous pouvez utiliser la ligne de code suivante:

Zend_Debug::Dump($select); 
exit; 

Ou si votre code est créé cep la classe Zend_Db_Table vous pouvez utiliser :

$select = new Zend_Db_Select(Zend_Registry::get('db')); 
$select->from('string'); 
Zend_Debug::Dump($select->assemble()); 
exit; 

Je pense que la meilleure façon de voir l'instruction SQL est en utilisant la fonction de profilage sur la connexion de base de données. C'est la combinaison avec la fonction de journalisation et l'add-on firePHP pour Firefox est ma configuration préférée.

Si vous utilisez la configuration MVC de Zend Framework ceci est fait blanc cette lignes de code:

// setup the database connection 
$db = Zend_Db::factory(Zend_Registry::get('config')->database->adapter,Zend_Registry::get('config')->database->params); 

// create a new profiler 
profiler = new Zend_Db_Profiler_Firebug('All DB Queries'); 

// enable profiling (this is only recommended in development mode, disable this in production mode) 
$profiler->setEnabled(true); 
// add the profiler to the database object 
$db->setProfiler($profiler); 

// setup the default adapter to use for database communication 
Zend_Db_Table_Abstract::setDefaultAdapter($db); 

// register the database object to access it in other parts of the project 
Zend_Registry::set('db',$db); 

/** 
* 
* This part is optional 
* 
* You can use this logger to log debug information to the firephp add-on for Firefox 
* This is handy for debugging but must be disabled in production mode 
* 
*/ 

// create logger 
$logger = new Zend_Log(); 

// create firebug writer 
$firebug_writer = new Zend_Log_Writer_Firebug(); 

// add writer to logger 
$logger->addWriter($firebug_writer); 

// register the logger object to access it in other parts of the project 
Zend_Registry::set('log',$logger); 

Le Firebug add-on (exigence FirePHP) se trouve sur ce site: Firebug

Le FirePHP add-on peut trouver sur ce site: FirePHP

Ivo Trompert