Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查MySQL“日期”列中是否存在特定日期?_Php_Mysql_Pdo - Fatal编程技术网

Php 如何检查MySQL“日期”列中是否存在特定日期?

Php 如何检查MySQL“日期”列中是否存在特定日期?,php,mysql,pdo,Php,Mysql,Pdo,使用下面的代码,我很难检查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

使用下面的代码,我很难检查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多个条目。它总是可以的,如果它包含任何东西的话,但我只想知道它在这个阶段是否存在

日期字段是MySQL的“日期”类型。我怀疑这个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();

您是否尝试过直接对数据库运行查询?$r['date']或$s['date']甚至$r['date']都来自何处?这一点很好@MarkBannister。我刚试过,上面写着“空结果集”。嗯…@CORRUPT&others将修改代码。这肯定是另一个问题。谢谢,谢谢。我正在检查这个,但是突然被叫走了。几小时后就要走了。在进一步检查后,我将接受一个答案。我认为这个答案可能就是答案。对于延迟,我感到抱歉,并感谢所有参与的人。这个答案就是我用过的。它工作得很好。谢谢Yogesh。不必将日期作为格式化字符串传递,它还可以作为查询使用时间戳作为参数:选择。。。其中date=DATEFROM\u UNIXTIME?限制1。DROM_UNIXTIME。。。将时间戳转换为日期时间,日期将其转换为日期,即将精度从秒降低到天。不是相反,而是同样。日期转换有很多方法,但这不是问题的主题。