2012-12-27 162 views
1

我有一个非常大的使用ZendFramework的Web应用程序。似乎有一些SQL语句中的语法错误的地方(自动生成了很多东西),但记录的错误是非常无益的(项目信息已删除)从ZendFramework获取完整堆栈跟踪

Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near [...] in [...]/ZendFramework/Zend/Db/Statement/Pdo.php:228 
Stack trace: 
#0 [...]/ZendFramework/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array) 
#1 [...]/ZendFramework/Zend/Db/Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array) 
#2 [...]/ZendFramework/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array) 
#3 [...]/ZendFramework/Zend/Db/Adapter/ in [...]/ZendFramework/Zend/Db/Statement/Pdo.php on line 234 

此堆栈跟踪包含了Zend内只引用框架和实际的调用者(最可能出现语法错误的地方)无处可见。

我如何Zend框架给我的时候发生错误的一个完整的堆栈跟踪?

回答

2

这些异常应该被记录在您的ErrorController()或任何你有传递作为ErrorController)通常默认模块(应用/控制器/ ErrorController.php)。如果是这种情况,应该很简单地修改记录机制。

它可能只是需要一点实验来找出你需要使用哪种方法来获得你需要的输出。

[编辑]

我应该指出的是,鉴于将是简单的地方,如果你使用的是默认的错误设置更新:

<!-- application/views/scripts/error/error.phtml --> 
<html> 
    <body> 
     <h1>An error occurred</h1> 
     <h2><?php echo $this->message ?></h2> 
     <?php if (isset($this->exception)): ?> 
      <h3>Exception information:</h3> 
      <p> 
       <b>Message:</b> <?php echo $this->exception->getMessage() ?> 
      </p> 
      <h3>Stack trace:</h3> 
      <pre><?php echo $this->exception->getTraceAsString() ?> 
      <!-- add full Trace info --> 
      <pre><?php echo $this->exception->getTrace() ?></pre> 
      </pre> 
      <h3>Request Parameters:</h3> 
      <pre><?php echo $this->escape(var_export($this->request->getParams(), true)) ?> 
      </pre> 
     <?php endif ?> 
    </body> 
</html> 
1

如果您需要更详细的堆栈跟踪,你可以使用:

foreach($this->exception->getTrace() as $t){ 
     var_dump($t); 
    } 

提到here。但是,我想你会更好地使用萤火虫和firephp和调试SQL查询与Zend_Debug_Profiler_Firebug类,如本有用的文章hereherehere描述。

+0

获取完整的堆栈跟踪那样是在很好,如果我知道抛出异常的位置,所以我可以将它包装到try-catch块中。但是,错误以“未捕获的异常”开头,所以我不知道异常处在哪里,这就是为什么我要问这个问题。感谢您的链接,我会考虑他们的下一个应用程序,但在这一点上添加第三方工具几乎是不可能的。 –

相关问题