【问题标题】:php Codeigniter - error while executing library Subquery.phpphp Codeigniter - 执行库 Subquery.php 时出错
【发布时间】:2012-05-26 18:01:09
【问题描述】:

我一直在使用子查询库 - 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

【问题讨论】:

  • 在您的控制器中尝试:$this->load->database('',true); 并检查它!
  • 感谢您的回复,但是...不,它不起作用。 :(。如果是这样,应该用以下语句替换什么: $db = $this->CI->load->database('', true); 在 start_subquery 函数中?
  • load->database() 应该可以工作。所以请不要改变!我认为这个子查询库没问题。恕我直言,问题是您在 CI 中的数据库配置:codeigniter.com/user_guide/database/configuration.html 请检查!
  • 我已经检查了数据库配置文件和文档。
    $active_group = '默认';
    $active_record = TRUE;

    $db['default']['hostname'] = 'localhost';
    $db['default']['username'] = '****';
    $db['default']['password'] = '***';
    $db['default']['database'] = '* ***';
    $db['default']['dbdriver'] = 'mysql';

    其余配置为默认。
  • 你可以使用db的任何功能吗?例如。一个简单的select 可以看到codeigniter.com/user_guide/database/examples.html

标签: php codeigniter subquery


【解决方案1】:

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

可能的解决方案:_compile_select() 应该是 public 或 class Subquery 应该是 CI 的 db 类的扩展。我认为您应该将此报告给 Subquery 的作者。

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

对不起 - 我想把它写成评论。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • extends CI_DB_active_record 真的有效吗?我认为 CodeIgniter 正在删除扩展 DB 类的能力。
    【解决方案3】:

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

    在 GitHub (https://github.com/EllisLab/CodeIgniter) 上的 CodeIgniter 开发版中,有一个公开的 get_compiled_select 方法。似乎此更改尚未推送到稳定版本。

    所以,要让这个库正常工作,您可以尝试使用 CodeIgniter 的开发版本。我很确定他们将来会移除 extend CI_DB_active_record 的功能 (http://codeigniter.com/user_guide/general/creating_libraries.html)。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多