所以这在过去的两个小时里一直让我发疯......
$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();
在 Navicat 中的 PDO 之外运行此查询工作正常(我得到 17 条记录),但无论我如何尝试更改它,它在 PDO 中都不起作用。我对许多不使用日期约束的 PDO 查询使用相同的代码,它们都运行得非常好。
仅供引用,listing_entry_timestamp 是一个日期时间字段
编辑 - 这是整个代码块
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 中针对实时数据进行测试,因此查找昨天数据的查询找不到任何内容.
最佳答案
PDO 与日期字段无关。
它适用于日期。
因此,查找代码/数据库/环境/其他内容中的错误。
我对不同数据库的赌注。您使用 navicat 连接的一条包含 17 条要匹配的记录,而您使用 PDO 连接的一条则不包含任何记录。
第二个猜测是您的数据库类中存在一些错误的代码。
让我抓狂的是毫无意义的建议和疯狂的猜测。
好的
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);
输出
array(1) {
[0]=>
array(1) {
["d"]=>
string(19) "2014-04-02 00:23:16"
}
}
它有效。
至少使用原始 PDO。
- SQL没有问题
- PDO没有问题
- 日期没有问题
- 引号没有问题(只要我们认为17个返回结果是理所当然的。但是,在ANSI模式下它们会导致错误)
只能是您自己的代码/数据/输入有问题
关于PHP - 使用带有日期字段的 PDO 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22795138/