2010-07-12 127 views
1

我有一個CI模型建立與此功能和ActiveRecord的:CodeIgniter MySQL Query不返回任何數據,即使肯定有數據要返回!

function get_open_competitions() 
{          
    $this->db->select('*, TO_DAYS(closingdate) - TO_DAYS(CURDATE()) AS days') 
       ->from('challenges') 
       ->where('closingdate >','CURDATE()') 
       ->order_by('days','asc'); 

    $query = $this->db->get();   
    return $query; 
} 

我99.9%的信心,將運行此查詢:當我把通過phpMyAdmin的或純查詢

SELECT *, TO_DAYS(closingdate) - TO_DAYS(CURDATE()) AS days 
FROM challenges 
WHERE closingdate > CURDATE() 
ORDER BY days ASC 

Sequel Pro,它從數據庫返回5行 - 如預期的那樣。然而,當我在challenges控制器調用下面的代碼:

function index() 
{ 
    // Fetch the Open for Entry competitions 
    $data['open'] = $this->cm->get_open_competitions(); 
    // Fetch the Open for Voting competitions 
    $data['voting'] = $this->cm->get_voting_competitions(); 
    // Fetch the Ended Competitions 
    $data['ended'] = $this->cm->get_ended_competitions(); 

    $data['colwide'] = 'challenges/challengeshome'; 
    $this->load->view('templatewide',$data); 
} 

...然後在視圖文件調用它像這樣...

<h2>Open for Entry</h2> 

<hr/> 

<?php foreach ($open->result() as $row) { ?> 
    <h3> 
     <?php echo anchor('challenges/view/'.$row->id, $row->title);?> - 
     <i>Challenge ends and voting begins in <?php echo $row->days;?> days</i> 
    </h3> 
    <h4> <?php echo $row->description;?> </h4> 
<?php } ?> 

......沒有什麼是輸出!

這是混淆了我,因爲我很肯定我已經有了一個有效的查詢,還我有兩個其他型號功能 - get_ended_competitionsget_voting_competitions - 我使用這一起其中做工精細兩者。代碼絕對沒有什麼不同。

我在做什麼錯? :S

謝謝!

傑克

編輯:沒有寫入要麼笨日誌或者PHP的錯誤日誌。

回答

1

別的之前,使探查在你的控制器構造:

$this->output->enable_profiler(true); 

這種方式,你會看到產生什麼查詢。

LE:也不要忘了$this->db->last_query();;)

+0

謝謝你提醒我關於探查。只需通過數據庫運行查詢 - 問題是,ActiveRecord將CURDATE()放在引號內,因此將其視爲文本而不是MySQL函數!你知道解決這個問題的方法嗎? – Jack 2010-07-12 09:36:32

+0

明白了。 '$ this-> db-> where()'的第三個參數設置爲FALSE時,不會添加反引號。謝謝波格丹! – Jack 2010-07-12 09:38:07

+0

是的,CI的Active Record逃生機制有時候真的是PIA :) – Bogdan 2010-07-12 10:02:59