使用下面的代码,我无法检查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']。我怀疑我的结构仍然存在问题,但可能需要修复查询,以便在关注此问题之前给出结果。
还尝试直接对数据库运行查询并得到一个空的结果集,尽管能够看到目标日期存在。仍然感到困惑!
答案 0 :(得分: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;
}
答案 1 :(得分: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;
请注意运行脚本的服务器与数据库服务器本身之间的任何时区差异。
答案 2 :(得分:-2)
您的代码存在许多缺陷,而不是一个:
所以,代码必须是
$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();