【发布时间】:2019-06-04 14:54:23
【问题描述】:
我有一些代码可以用 PHP 5.6.38 和 PDO 查询 MariaDB。数据库和代码工作正常,但如果我将 BETWEEN 运算符与两个日期时间一起使用,代码不会给出任何结果 - 这意味着 Null - 并且没有错误 - 没有异常 - 始终为 Null。 MariaDB 中的字段类型是 DATETIME。存储在 DB 中的格式为 '2019-05-06 14:16:32'。
我尝试了许多来自 stackoverflow 的技巧。问题接缝很老而且众所周知,但我目前没有解决方案。我当前的代码如下所示:
(使用简单的网络服务器测试问题的示例代码)
<?php
$cal = new Calendar();
var_dump($cal->GetDatabaseEvents('2019-06-01T00:00:00+200', '2019-06-10T23:59:59+200'));
class Calendar {
private $dbh;
public function __construct() {
$this->dbh = new PDO('mysql:host=localhost;dbname=calendar', 'mytable', 'mypwd');
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
public function GetDatabaseEvents($start, $end) {
$sql ="SELECT id, datetime_begin FROM events WHERE datetime_begin BETWEEN '2019-06-00T00:00:00' AND '2019-06-10T23:59:59'";
$sth = $this->dbh->prepare($sql);
if($count = $sth->execute()) {
while ($row = $sth->fetchObject()) {
echo some member of $row...
}
} else {
echo "SQL Error <br />";
echo $sth->queryString."<br />";
echo $sth->errorInfo()[2];
}
}
}
没有错误或异常。所有结果均为 NULL。如果我从 SQL 中删除 FROM 部分,则语句可以正常工作并给出预期的结果。
我尝试了许多其他技巧,例如
a) CAST('2019-01-05T00:00:00', DATE 或 DATETIME) 或
b) 没有像这样的 ISO DateTime '2019-01-05 00:00:00' 有 CAST 和没有 CAST 或
c) 没有 BETWEEN 但 (datetime_begin >= begin AND datetime_begin bindParam(':start_date', $start, PDO::PARAM_STR);
但所有结果都是NULL
你有什么建议吗?
【问题讨论】:
-
T是问题所在。 MySQL 无法识别该语法。
标签: sql datetime mariadb between php-5.6