這一直困擾着我最後兩個小時(接近三個小時) - 它只在一個平臺上顯現。爲什麼在Windows上運行PHP而不是在CentOS上只顯示此行?
下面是一個SQL表的方案:
CREATE TABLE cache (url TINYTEXT,
data MEDIUMTEXT,
retrieval_timestamp INT,
ttl INT)
現在,我的PHP代碼使用SQLite的PDO驅動程序在磁盤上創建一個數據庫文件。上面的SQL語句被執行並且表被創建。到目前爲止這麼好 - 我的所有測試機器都能成功執行該語句。
接下來,我將數據插入表中 - 再次,所有機器插入數據都沒有錯誤。由於SQLite將數據庫存儲在文件中,我只能在SQLite Database Browser中打開它並驗證是否插入了數據。
問題出現在這裏:我無法在運行PHP 5.2的CentOS機器上檢索數據。
下面是我使用的PHP代碼(並記住它工作在PHP 5.3在Windows上):
$statement = $this->database->prepare('SELECT data FROM cache WHERE url = ? AND retrieval_timestamp + ttl >= ?');
$statement->bindValue(1, $url);
$statement->bindValue(2, time(), PDO::PARAM_INT);
$statement->execute();
在CentOS的機器,上面的代碼執行不返回任何錯誤。但不是返回預期的行(其他機器以相同的查詢返回)我什麼也沒有 - 沒有行。如果我將SELECT data
更改爲SELECT data, retrieval_timestamp + ttl
,我實際上可以查看錶達式的結果並手動將其與當前時間戳進行比較 - 並且數據確實滿足條件,因此應該將結果返回到。
如果我刪除WHERE
條款的第二部分,預期數據返回,但當然,這違背了表:)
我在做什麼錯的目的是什麼?
更新:它變得怪異 - 當我手動使用query
代替prepare
並指定參數,它的工作原理(CentOS的機器上)。所以它看起來是準備好的語句的問題。
這裏是SQLite的文件:http://dl.dropbox.com/u/31080052/test.sqlite
這是我上運行的查詢:
SELECT data FROM cache WHERE url = 'c' AND retrieval_timestamp + ttl >= 1326780275
是的,我害怕我做了 - 沒有區別。 – 2012-01-17 17:53:26