1

使用下面的代码,我无法检查 MySQL 的“日期”列中是否存在指定的日期。

$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;

}

尽管我可以在 phpMyAdmin 中看到日期“2013-05-08”,但它返回错误。

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

日期字段是 MySQL 的“日期”类型。我怀疑该错误存在于我对查询的 PDO 调用的结构中。

更新

更新$r['date']为`$s['date']。我怀疑我的结构仍然存在问题,但可能需要修复查询,以便在关注此问题之前为我们提供结果。

还尝试直接对数据库运行查询并得到一个空的结果集,尽管能够看到目标日期存在。还是一脸懵逼!

4

3 回答 3

2

试试这个

$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;
}
于 2013-05-08T07:10:00.130 回答
0

由于 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;

记下运行脚本的服务器和数据库服务器本身之间的任何时区差异。

于 2013-05-08T07:19:37.297 回答
-2

您的代码有很多缺陷,没有一个:

  • 您正在检查的值的格式
  • 您签入 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();
于 2013-05-08T07:38:05.313 回答