2012-05-26 34 views
0

我一直在使用一個庫子查詢的工作 - Subquery.php 編號:https://github.com/NTICompass/CodeIgniter-SubqueriesPHP笨 - 錯誤而執行庫Subquery.php

$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; 
    } 

FYI - 我在database.php中:

$active_group = 'default' 
$active_record = TRUE; 

和CI版本2.1.0

+0

試試你的控制器:'$ this-> load-> database('',true);'檢查它! – uzsolt

+0

感謝您的回覆,但是...不,它不工作。 :(如果是這種情況,應該用下面的語句替換:$ db = $ this-> CI-> load-> database('',true);在start_subquery函數中? –

+0

load-> database( )'應該可以工作,所以請不要改變!我認爲這個子查詢庫是可以的。恕我直言,你的數據庫配置在CI中是這樣的:http://codeigniter.com/user_guide/database/configuration.html 請檢查! – uzsolt

回答

1

嗯,明白了。當我在第27行看到子查詢的源代碼時,它想要調用_compile_selectget_compiled_select。如果您可以檢查CI的DB_active_rec.php_compile_select將受到保護,因此您無法從子查詢訪問(它不是db的子類)。

可能的解決方案:_compile_select() public或Subquery應該是CI的db類的擴展。我認爲你應該將此報告給Subquery的作者。

或者你也可以延長CI的DB類:)

對不起 - 我想將它寫在註釋中。

1

謝謝,我已經改變了stmt。 class Subqueryclass Subquery extends CI_DB_active_record在Subquery.php中,它工作正常。是的,我會將此報告給作者。 :)

+0

'擴展CI_DB_active_record'實際工作嗎?我認爲CodeIgniter刪除了擴展DB類的能力。 –

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的能力(http://codeigniter.com/user_guide/general/creating_libraries.html)。