2014-04-01 85 views
0

所以這一直推動我堅果的最後兩小時日期字段...PHP - 使用PDO與不工作

$sql = 'SELECT * FROM master_rets_table 
      WHERE listing_entry_timestamp > "2014-04-01 00:00:00" 
      ORDER BY listing_price DESC'; 
    } 
$this->stm = $this->prepare($sql); 
$this->stm->execute(); 

運行PDO超出此查詢在Navicat工作正常(我得到17條記錄) ,但無論我如何改變這種情況,它都不適用於PDO。我使用相同的代碼來處理大量不使用日期約束的PDO查詢,並且它們都可以很好地工作。

僅供參考,listing_entry_timestamp是DateTime字段

編輯 - 這裏是整個代碼塊

if ($this->city != "") { 
    $sql = 'SELECT * FROM master_rets_table 
      WHERE city = '.$this->city.' 
      ORDER BY listing_price DESC'; 
    } 
    else if ($this->subdiv != ""){ 
    $sql = 'SELECT * FROM master_rets_table 
      WHERE subdivision REGEXP '.$this->subdiv.' 
      ORDER BY listing_price DESC'; 
    } 
    else if ($this->date_from != "") { 
    $sql = "SELECT * FROM master_rets_table WHERE (listing_entry_timestamp > '2014-04-01') ORDER BY listing_price DESC"; 
    } 

$this->stm = $this->prepare($sql); 
$this->stm->execute(); 

$this->rows= $this->stm->fetchAll(PDO::FETCH_ASSOC); 
$this->count = $this->stm->rowCount(); 
$this->rowIdx = 0; 

它的另外兩起案件工作正常...它看起來好像是做日期時間字段什麼的。

編輯[解決方案] - 事實證明,實時數據沒有被推送到開發服務器,我在Navicat中對實時數據進行了測試,因此查找昨天數據的查詢找不到任何東西。

+1

定義「不工作」。你會取得結果嗎? –

+0

@你不工作=沒有結果和$這是我設計的擴展PDO類,適用於很多不使用日期的查詢。 – menriquez

+0

你會友善併爲我們提供表格模式嗎? – ROLO

回答

1

PDO與日期字段無關。
它與日期一起工作。

因此,尋找代碼/數據庫/環境/任何錯誤。

我爲不同的數據庫打賭。你與navicat連接的一個包含17條匹配記錄,而你與PDO連接的記錄包含nones。

第二個猜測是你的db類中的一些錯誤的代碼。

什麼是驅動堅果是毫無意義的建議與野生猜測。

O.K.

MySQL的

mysql> create table so_again(d datetime); 
Query OK, 0 rows affected (0.23 sec) 
mysql> insert into so_again values (now()); 
Query OK, 1 row affected (0.08 sec) 
mysql> select * from so_again where d > '2014-04-01 00:00:00'; 
+---------------------+ 
| d     | 
+---------------------+ 
| 2014-04-02 00:23:16 | 
+---------------------+ 
1 row in set (0.02 sec) 

PHP

$sql = 'select * from so_again where d > "2014-04-01 00:00:00"'; 
$stm = $pdo->prepare($sql); 
$stm->execute(); 
$stm = $stm->fetchAll(); 
var_dump($stm); 

ouptut

array(1) { 
    [0]=> 
    array(1) { 
    ["d"]=> 
    string(19) "2014-04-02 00:23:16" 
    } 
} 

它的工作原理。

至少與原始PDO。

  • 沒有與SQL沒有問題
  • 沒有與PDO沒有問題
  • 沒有與日期沒有問題
  • 沒有用引號沒有問題(只要我們採取17返回的結果是理所當然的。然而,在ANSI模式下,它們會導致錯誤)

只能有問題,用自己的代碼/數據/輸入

+0

這是我的代碼...從我的IDE中剪切並粘貼。 execute()返回沒有結果,但確切的查詢在phpmyadmin和navicat中工作正常 – menriquez

+1

請閱讀我的答案。我相信你沒有結果。但這不是PDO的責任。 –

+1

您現在發佈的代碼與「從IDE剪切並粘貼」的代碼截然不同。你有多少個IDE? –

-1
can you tell me the output when you execute this modified query: 

$sql = 'SELECT * FROM master_rets_table 
       WHERE (listing_entry_timestamp > :entry_date) 
       ORDER BY listing_price DESC'; 
     } 
    $this->stm = $this->prepare($sql); 
    $this->stm->execute(array("entry_date"=>"2014-04-01 00:00:00")); 
+1

爲什麼你需要輸出,爲什麼你認爲它會有什麼不同? –

+1

好吧,你忘了在執行()結束時關閉parenth初學者... – menriquez

+0

@YourCommonSense是正確的......沒有什麼改變。 – menriquez

0

試試這個:

$sql = "SELECT * FROM master_rets_table WHERE listing_entry_timestamp > :date ORDER BY listing_price DESC"; 
$statement = $this->prepare($sql); 
$statement->bindParam (":date", "2014-04-01 00:00:00"); 
$statement->execute(); 
+1

他已經把它寫成一個字符串了。 –

+0

在這裏似乎沒人理解SQL是如何工作的 –

+0

我從未見過**從未見過如此多的人從未運行過查詢日期 –

0

只有兩個我想到的事情是,你可能在date參數中有某種類型的轉換錯誤,或者是邏輯路徑錯誤。我還注意到,您將$city視爲字符串,但您不引用它。

嘗試:

if ($this->city != "") { 
    $where = 'city = ?'; 
    $match = $this->city; 
} else if ($this->subdiv != "") { 
    $where = 'subdivision REGEXP ?'; 
    $match = $this->subdiv; 
} else if ($this->date_from != "") { 
    $where = 'listing_entry_timestamp > ?'; 
    $match = 20140401; 
} else { 
    trigger_error("No search", E_USER_ERROR); 
} 

$sql = "SELECT * FROM master_rets_table WHERE {$where} ORDER BY listing_price DESC"; 
$this->stm = $this->prepare($sql); 
$this->stm->execute(array($match)); 

$this->rows = $this->stm->fetchAll(PDO::FETCH_ASSOC); 
$this->count = $this->stm->rowCount(); 
$this->rowIdx = 0; 

這都應該提供一個「可識別」參數PDO,並確保$sql確實填充。

另一種可能性

你說,

$city與PDO預格式化::報價()...這就是我的

如果是這樣,讓我們​​的老習慣假設$this->city最初是空的。

然後PDO::quote會將它變成一個空的帶引號的字符串:即一對沒有任何內容的引號。

然後,比較$this->city != ""總是會返回true,因爲city不是「」,而是「」「。

因此,SQL將運行與您所期望的不同的查詢。

+0

fyi'$ city'已預先格式化爲'PDO :: quote()'.. 。那是我的一個老習慣 – menriquez

+0

啊,那麼還有另一種可能。 – LSerni