你如何调试CodeIgniter应用程序?

时间:2010-11-23 20:34:53

标签: php mysql debugging codeigniter

我按照教程中的步骤学习如何使用Code Igniter构建PHP / MySQL应用程序,完成后应用程序失败并且没有错误。我正在使用TextMate而不是功能齐全的IDE。

大多数使用Code Igniter的开发人员如何调试他们的应用程序?框架中是否存在冒泡错误和堆栈跟踪到浏览器会话中的内容?

我现在要解决的具体问题似乎与数据库有关。我配置了我的数据库,设置了autoload.php,并创建了一个用于处理表数据的控制器和模型,以及一个用于呈现它的视图。来自我的accounts_model.php:

 public function getData()  
 {
     //Query the data table for every record and row
     $query = $this->db->get('accounts');

     if ($query->num_rows() > 0)
     {
         show_error('Database is empty!');
     }
     else
     {
         return $query->result();
     }
 }

当我运行应用程序时,我看到“遇到错误\ n数据库为空!”。由于我知道数据库不是空的并且配置是正确的,因此我需要框架中的一些内容来提示我是否连接到数据库或查询为空的原因。

7 个答案:

答案 0 :(得分:5)

一个好的做法是将关键代码放入try / catch块中,以便您可以处理异常,然后记录该错误的堆栈跟踪。在我最近的经验中,我使用了try / catch块以及CodeIgniter提供的show_error()函数来调试和捕获代码中的错误。这是一个例子:

public function getData()  
 {
     //Query the data table for every record and row
     try{
        $query = $this->db->get('accounts');

        if ($query->num_rows() > 0)
        {
            show_error('Database is empty!');
        }
       else
       {
           return $query->result();
       }
     } catch(Exception $e){
        log_message('debug',$e->getMessage()); // use codeigniters built in logging library
        show_error($e->getMessage()); // or echo $e->getMessage()
      }
 }

PHP异常类提供了各种方法来帮助调试错误。 http://www.php.net/manual/en/class.exception.php

答案 1 :(得分:3)

您可以使用Xdebug,最好从Test Driven Development开始,在PHP中,您可以使用PHP Unit

答案 2 :(得分:3)

如果您还没有看过名为Firebug的firefox令人惊叹的Web开发扩展程序,那么您应该查看它!

Firebug有一个名为FirePHP的扩展,它允许您调试PHP应用程序。有人在CodeIgniter之前创建了一个名为FireIgnition的插件。

它使您能够记录变量等,以便在页面执行时更容易看到正在发生的事情。

答案 3 :(得分:3)

当我需要在屏幕上抛出变量,对象,数组或资源来查看它时,我发现dbug非常有用:
example nested arrays with mixed keys

可以找到将其集成到CodeIgniter中的文章here

答案 4 :(得分:1)

你做过if ($query->num_rows() > 0)。如果返回的行数超过0行,则会打印错误。

答案 5 :(得分:1)

我使用VS.PHP,一个Visual Studio的插件,用于我的PHP工作。非常好。语法高亮,自动完成,PHP和JavaScript调试在同一个会话中,工作。

答案 6 :(得分:-1)

好奇:

$query->num_rows() > 0

如果成功则意味着有一些结果......

我会做这样的事......

    function get_data()
    {


    $results = $this->db->get("tble");

    if($results->num_rows()>0)
    {

    return $results->result_array();

    }
    else
    {
    return array();

    }

}

并在控制器中

if(empty( $this->model->get_data() ))
{

//do something with data
}
else
{

//no data
}