2012-10-28 36 views
0

只是關於codeigniter Active Records的get_where函數的問題。我希望得到它應該是這樣的查詢:codeigniter get_where與檢查值中的mysql函數

Select * from foo 
where date = STR_TO_DATE('$month/$day/$year','%m/%d/%Y') 
    and time = STR_TO_DATE('$hour:$minute$ampm', '%l:%i%p') 

現在,我創造了我的模型的功能出現這樣的:

public function validate_if_existing($month,$day,$year,$hour,$minute,$ampm) 
{ 
    $event_date = "STR_TO_DATE('$month/$day/$year','%m/%d/%Y')"; 
    $event_time = "STR_TO_DATE('$hour:$minute$ampm', '%l:%i%p')"; 

    $this->db->flush_cache(); 
    $query = $this->db->get_where('foo',array('event_date' => $event_date,'event_time'=> $event_time)); 

    return $query->num_rows(); 
} 

但它返回0行,我希望它是1。我試圖檢查$event_date$event_time內容,它看起來和我預期的完全一樣。像這樣:

STR_TO_DATE('01/01/2012','%m/%d/%Y') 

我做錯了嗎?無論如何要解決這個問題?

+0

對數據庫首先運行您的原始查詢(SQL),並查看它是否返回任何東西 – zarkoz

+0

是的,它返回一個基於我給出的數據的行。 – KaHeL

+0

這些值將在查詢中轉義。運行'$ this-> db-> last_query();'並檢查生成的查詢。 – air4x

回答

0

知道了!我只是手動添加使用$this->db->where()這樣的過濾器:

$this->db->where('event_date',"STR_TO_DATE('$month/$day/$year','%m/%d/%Y')", FALSE); 

作品就像在$this->db->select()$this->db->get_where()只是一個快捷方式。在進行非複雜查詢時很好用。感謝air4x給我一些提示。 :)

+0

這會不會容易發生SQL注入攻擊? –