php Codeigniter - 执行库Subquery.php时出错

时间:2012-05-26 18:01:09

标签: php codeigniter subquery

我一直在使用子库来运行子查询 - Subquery.php 参考:https://github.com/NTICompass/CodeIgniter-Subqueries

$this->db->select('test');
$this->db->select('test2');
$this->db->from('table');
$sub = $this->subquery->start_subquery('where_in');
$sub->select('IDs');
$sub->from('idTable');
$sub->where('date', '2011-07-10');
$this->subquery->end_subquery('id');

我认为这句话:

$sub = $this->subquery->start_subquery('where_in');

包含错误。当我执行这一行时,我得到一个空白页面。 fn。 start_subquery是:

function start_subquery($statement, $join_type = '', $join_on = 1){
        $db = $this->CI->load->database('', true); // after executing this statement, a blank page shows...
        $this->dbStack[] = $db;
        $this->statement[] = $statement;
        if(strtolower($statement) == 'join'){
            $this->join_type[] = $join_type;
            $this->join_on[] = $join_on;
        }
        return $db;
    }

仅供参考 - 在我的database.php中:

$active_group = 'default'
$active_record = TRUE;

CI版本为2.1.0

3 个答案:

答案 0 :(得分:1)

嗯,明白。当我在第27行看到子查询的源代码时,它想要调用_compile_selectget_compiled_select。如果您可以签入CI DB_active_rec.php,则_compile_select受到保护,因此您无法从子查询访问(它不是db的子类)。

可能的解决方案:_compile_select()应公共或类Subquery应扩展CI的db类。我想你应该向Subquery的作者报告。

或者您可以扩展CI的db类:)

抱歉 - 我想把它写成评论。

答案 1 :(得分:1)

谢谢,我已经更改了stmt。 Subquery.php中的class Subqueryclass Subquery extends CI_DB_active_record,它运行正常。是的,我会向作者报告。 :)

答案 2 :(得分:0)

我写了那个库,所以感谢你使用它。问题是(@uzsolt has stated_compile_select受到保护。它曾经不在CodeIgniter 1.7.x中(它只是一些开发人员发现的一个简洁的隐藏方法)。

在GitHub上的CodeIgniter的开发版本(https://github.com/EllisLab/CodeIgniter)中,有一个公共get_compiled_select方法。似乎这种变化还没有被推到稳定版本中。

因此,要使此库工作,您可以尝试使用CodeIgniter的开发版本。我很确定他们将来会删除extend CI_DB_active_record的{​​{1}}能力。{/ p>