PHP - 使用带有日期字段的 PDO 不起作用

标签 php mysql 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();

在 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/

相关文章:

php - 将列结果存储在变量中

php - 使用 PDO 安全可靠的面向对象插入

php - PDO连接有什么问题?

php - 从表中加载用户设置

mysql - #1054 - 'general' 中的未知列 'where clause'

python - 如何从 Python 中的 Azure Functions 连接到 Azure 托管 MySQL 数据库?

mysql - 检查所有行都相同

php - 如何使用 sphinx 进行短语搜索

php - bootstrap datetimepicker dateformat保存到mysql

php - 从 PHP 脚本绑定(bind)到套接字时遇到问题