【问题标题】:PDO MySQL get records with previous datePDO MySQL 获取上一个日期的记录
【发布时间】:2013-08-07 10:46:09
【问题描述】:

我有一个包含一些列的表格。我想使用其中两个过滤一些记录,一个是 INT 类型,第二个是 DATETIME 类型。我正在使用 PHP PDO 扩展来连接数据库并进行一些查询。

我正在尝试从日期时间字段低于给定日期 f.e. 的表中获取记录

<?php
    $date = date("Y-m-d");
    $this->db->query("SELECT * FROM `" . DB_PREFIX . "fanpage` WHERE `flag_warning` = ? AND DATE(`update_date`) < ?", array(1, $date));
?>

这返回 NULL,但是当我将相同的查询粘贴到 phpMyAdmin 窗口时,它会显示正确的记录。有什么问题?

编辑:

来自查询函数的片段:

public function query($sql, $params = array())
{
    $result = array();
    $result['query'] = $this->pdo->prepare($sql);
    $result['query']->execute($params);
    $this->lastResult = $result['query'];
    unset($result['query']);
}

【问题讨论】:

  • 你能在你的库中展示实际的准备方法吗,因为这没有任何意义
  • 你调用 $this->db->e​​xecute() 了吗?
  • 我的preparePDO::prepare 函数的扩展。

标签: php mysql datetime pdo


【解决方案1】:

根本不需要准备好的语句

WHERE flag_warning = 1 AND update_date < CURDATE()

【讨论】:

  • 另外,当我删除 update_date &lt; CURDATE() 我得到结果
  • @CarlosCampderrós - 时间戳
  • 另外奇怪的是,当我在不同的表(但相同的列)上使用相同的查询时,它可以工作。也许是一些表格设置或其他什么?
  • 您所好奇的一切都可以轻松找到:只需选择您尝试在 WHERE 子句中使用的值并查看
【解决方案2】:

使用

$sqlStatement = $this->db->prepare("SELECT * FROM `" . DB_PREFIX . "fanpage` WHERE `flag_warning` = ? AND `update_date` < CURDATE()");
$this->db->execute(array(1));
$result = $sqlStatement->fetchAll(PDO::FETCH_ASSOC);

现在 $result 有你需要的东西了。

【讨论】:

  • 仍然没有显示正确的结果,每次我什么都没得到。当我在 phpMyAdmin 或 SQL 控制台中尝试该查询时,它会显示结果..
【解决方案3】:

我已将列名更改为date_time_upd,它现在可以工作,我认为这是错误或什么,也许有人可以解释一下?

编辑:

好的,我想通了。有一段代码检查查询中是否出现“UPDATE、DELETE OR INSERT”字样,如果有类似的字词,则未获取查询结果。我已将其更改为搜索 SELECT 单词,现在一切正常。

【讨论】:

  • 这就是为什么这些片段检查工具是邪恶的
  • 确实如此,我现在知道了,你知道更好的选择吗?
  • 是的,当然。使用面向对象编程,而不是尝试使用一个函数在一次调用中完成所有数据库操作,基于一些不可靠的魔法。
猜你喜欢
  • 1970-01-01
  • 2019-11-28
  • 1970-01-01
  • 2013-10-31
  • 2014-01-31
  • 2015-09-21
  • 2014-03-10
  • 2021-12-06
相关资源
最近更新 更多