使用 PDO (PHP) 比较 MySQL 中的日期无法使用 YYYY-mm-dd 格式

Comparing dates in MySQL using PDO (PHP) not working using YYYY-mm-dd format

我正在尝试使用 MySQL 和 PDO PHP 从两个日期之间获取记录。

SELECT * FROM tripTable AS trip
WHERE trip.travelDate BETWEEN :startDate AND :endDate

这在使用 $_POST 日期变量 1970-01-01 时似乎不起作用2099-01-01 但当我将它们转换为变量时有效 1970010120990101 分别.

travelDate 存储为日期格式。

:startDate 为 1970-01-01,:endDate 为 2099-01-01

示例PHP代码

$startDate = $_POST["startdate"];
$endDate = $_POST["enddate"];

$stmt = $dbh->prepare(/*above query*/);
$stmt->bindValue(":startDate", $startDate, PDO::PARAM_STR);
$stmt->bindValue(":endDate", $endDate, PDO::PARAM_STR);
$stmt->execute();
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC))

这是为什么?有什么方法可以在我的 SQL 查询中解决这个问题?

我正在使用 PhpStorm 2019.3.4 的内置查询控制台测试查询

我不确定问题出在哪里,但我在 PHPStorm 查询控制台外再次测试了它,它似乎在控制台外工作。似乎 PHPStorm 要求将 PDO 类型日期写为 YYYYmmdd ONLY

执行带参数的查询时,您需要用引号将您的值括起来。

实际执行的 SQL(您可以在 "Output" 选项卡中看到您的数据库查询控制台,请参阅第二张屏幕截图):

SELECT * FROM events
WHERE created_at >= '2019-04-25'

如果你省略它们,那么它会这样执行,这是错误的:

SELECT * FROM events
WHERE created_at >= 2019-04-25

您可能会看到使用所有 3 种方式获取了多少结果(table 有 13 行,正确的查询应该 return 只有 11 行):