2013-08-07 43 views
0

我有一個表與一些列。我想用它們中的兩個過濾一些記錄,一個是INT類型,另一個是DATETIME類型。我使用PHP PDO擴展來連接數據庫並進行一些查詢。PDO MySQL得到記錄與以前的日期

我想從我的表中獲取記錄,其中日期時間字段低於給定日期f.e.

<?php 
    $date = date("Y-m-d"); 
    $this->db->query("SELECT * FROM `" . DB_PREFIX . "fanpage` WHERE `flag_warning` = ? AND DATE(`update_date`) < ?", array(1, $date)); 
?> 

返回null,但是當我貼上相同的查詢到phpMyAdmin的窗口就說明我正確的記錄。問題是什麼?

編輯:

從查詢功能片段:

public function query($sql, $params = array()) 
{ 
    $result = array(); 
    $result['query'] = $this->pdo->prepare($sql); 
    $result['query']->execute($params); 
    $this->lastResult = $result['query']; 
    unset($result['query']); 
} 
+0

那麼你可以在你的庫中顯示實際的準備方法,因爲這並不意味着什麼 – DevZer0

+0

你調用了$ this-> db-> execute()嗎? – Jithesh

+0

我的'prepare'是'PDO :: prepare'函數的擴展。 – Kamil

回答

0

無需預處理語句都

WHERE flag_warning = 1 AND update_date < CURDATE() 
+0

我也試過,但是NULL返回了,我不知道爲什麼,這很奇怪。 – Kamil

+0

此外,當我刪除'update_date Kamil

+1

什麼是'update_date'列類型你的桌子? –

0

使用

$sqlStatement = $this->db->prepare("SELECT * FROM `" . DB_PREFIX . "fanpage` WHERE `flag_warning` = ? AND `update_date` < CURDATE()"); 
$this->db->execute(array(1)); 
$result = $sqlStatement->fetchAll(PDO::FETCH_ASSOC); 

現在$結果有你所需要的。

+0

仍然沒有顯示正確的結果,每次我什麼也沒有得到..當我在phpMyAdmin或SQL控制檯嘗試這個查詢時,它向我顯示結果.. – Kamil

+0

給我在phpmyadmin中工作的查詢。 – Jithesh

+0

'SELECT * FROM cms_fanpage WHERE update_date Kamil

-1

我已將列名更改爲date_time_upd,它現在可以正常工作,我認爲它是bug或其他問題,也許有人可以解釋它?

編輯:

好啦,我已經想通了。有一段代碼檢查查詢中是否出現了「UPDATE,DELETE或INSERT」單詞,如果有這樣的單詞,則查詢結果未被提取。我已經改變了搜索SELECT詞,現在一切正常。

+0

這就是爲什麼這些片段檢查設施是邪惡的 –

+0

這是真的,我知道現在,你知道有更好的選擇嗎? – Kamil

+0

是的,當然。要使用面向對象的編程,而不是試圖使用一個單一的函數來完成一次調用中的所有數據庫操作,這是基於某種不可靠的魔法。 –