这一直困扰着我最后两个小时(接近三个小时) - 它只在一个平台上显现。为什么在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