【发布时间】:2012-08-24 11:37:50
【问题描述】:
日期数据类型有问题。 我有一个 php mysql pdo 语句:
$mystmt = $mydb->prepare("
SELECT `ad_id`
FROM `tbl_actions`
WHERE
(`actiondate` > :nowcookietime )
");
$mystmt->execute(array(
':nowcookietime'=>date("Y-m-d H:i:s", time()-$cookiedurationlock),
)
);
$testnotinsql = $mystmt->fetch(PDO::FETCH_ASSOC); // EMPTY
代码运行返回空。但是,如果我从 general_log 获取下面的 sql 并在 sql 工具(HeidiSQL)中运行,它将返回记录。 来自 general_log 的 SQL:
SELECT ad_id
FROM tbl_actions
WHERE
(actiondate> '2012-08-24 17:53:21' )
我的 PHP 时区是 UTC+7 Mysql是SYSTEM(哪个UTC) 据我了解,如果使用相同的时区在 php 中插入和查询,则不是时区问题。
我用强制字符串测试绑定参数
':nowcookietime'=>date("Y-m-d H:i:s", time()-$cookiedurationlock),
但它同样是空的。
但是:如果使用引号,则返回行
':nowcookietime'=>"'".date("Y-m-d H:i:s", time()-$cookiedurationlock)."'",
你能澄清一下这句话有什么问题吗,因为我知道我们不需要报价,mysql pdo 报价给我们。
编辑 1:
我更新了正确的 sql。从测试中获取时,在 sql 中使用引号是我的错误。周围没有引号:nowcookietime 仍然为空。
关闭
请看下面我的回答。
【问题讨论】:
-
试试这个 ':nowcookietime'=>"'".date("Y-m-d H:i:s", time()-$cookiedurationlock)."'"
-
只需在准备好的语句中删除
:nowcookietime周围的引号即可。(actiondate > :nowcookietime )应该是这样,然后再次运行代码。 -
它是正确的数据类型吗? php.net/manual/en/pdo.constants.php
-
@N.B 对不起我的错误。 sql在sql中没有引号,它取自我的测试。 sql中没有引号,它返回空。我更新了我的问题。
-
+1 提醒我有关 general_log,检查此日志有助于确定我的问题。
标签: php mysql sql pdo prepared-statement