如何检查MySQL中是否存在特定日期'date'列


How to check for existence of specific date in MySQL 'date' column?

使用下面的代码,我在检查MySQL 'date'列中是否存在指定日期时遇到麻烦。

$data = array(1367971200);
$s=$dbh->prepare("
    SELECT DISTINCT
        `date`
    FROM
        `report_coa_bal_hist`
    WHERE
        UNIX_TIMESTAMP(`date`) = ?
");
if ($s->execute($data)) {
    if ($s['date'] == null) {
        return false;
    }
    return true;
}

它返回false,尽管我可以看到phpMyAdmin中显示的日期'2013-05-08'。

表本身包含该日期的70多个条目。如果它包含任何内容,它总是可以的,但我只是想知道在这个阶段它是否存在。

date字段是MySQL 'date'类型。我怀疑这个bug是在查询的PDO调用的结构中。

$r['date']更新为' $s['date']。我怀疑我仍然有一个问题的结构,但可能需要修复查询,以便它给我们的结果之前专注于此。

还尝试直接对数据库运行查询,得到一个空结果集,尽管能够看到目标日期存在。仍然困惑!

试试这个

$data = array(1367971200);
$s=$dbh->prepare("
SELECT COUNT(`date`) as c_date
FROM
    `report_coa_bal_hist`
WHERE
    UNIX_TIMESTAMP(`date`) = ?");
if ($s->execute($data)) {
    $result = $s->fetch(PDO::FETCH_ASSOC);
    if ($result['c_date'] > 0) {
        return false;
    }
    return true;
}

由于UNIX时间戳更精确(即秒),您不能使用它们选择一整天,您需要文本版本:

$data = array(date('Y-m-d', 1367971200));
$stmt = $dbh->prepare("SELECT COUNT(*)
    FROM `report_coa_bal_hist`
    WHERE `date` = ?
");
$stmt->execute($data);
$count = current($stmt->fetchAll(PDO::FETCH_COLUMN, 0));
return $count > 0;

请注意运行脚本的服务器和数据库服务器本身的时区差异。

你的代码有很多缺陷,但不是一个:

  • 正在检查的值的格式
  • 检查SQL的方式
  • 你得到结果的方式

所以代码必须是

$data = array('2013-05-07');
$sql  = "SELECT 1 FROM report_coa_bal_hist WHERE `date` = ? LIMIT 1";
$stm  = $dbh->prepare($sql);
$stm->execute($data);
return $stm->fetchColumn();