SELECT 在两个日期之间 php mysql

SELECT BETWEEN two dates php mysql

我有一个非常简单的 SQL 让我发疯。 我在租车公司工作 - 所以有一个 FromDate 和一个 ToDate(预订的汽车)

我的 MySQL 厕所是这样的:

id | FromDate | ToDate
-----------------------
24 | 01.10.2020 | 31.10.2020

因此,如果用户选择介于两者之间的日期,他应该会收到一条消息,表明汽车已被预订。到目前为止我尝试了什么:

SELECT id FROM booked_cars WHERE ($fromdate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = $vhid
SELECT id FROM booked_cars WHERE ($fromdate BETWEEN date(FromDate) AND date(ToDate) AND $todate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = $vhid
SELECT id FROM booked_cars WHERE (date(FromDate) BETWEEN $fromdate AND $todate) AND vhId = $vhid

我的 $fromdate、$todate 和 $vhid 带有 POST-Form。 值为

$fromdate = 03.10.2020
$todate = 07.10.2020
$vhid = 24

无论我尝试什么,我的 $statement->rowCount() 始终为零。

我正在将 PDO 与准备好的语句一起使用。我只是为了更好地阅读而写的。

$statement = $pdo->prepare("SELECT id FROM booked_cars WHERE (:fromdate BETWEEN date(FromDate) AND date(ToDate)) AND vhId = :vhid");
$statement->execute(array('fromdate' => $fromdate, 'vhid' => $vhid));
echo $statement->rowCount(); // Alway 0 with BETWEEN (when i select just the vhid, i got the result)

你需要在这里使用 STR_TO_DATE,数据库中保存的日期很可能是 YYYY-mm-dd 格式。

$statement = $pdo->prepare("SELECT `id` FROM `booked_cars` WHERE `vhId` = :vhid AND STR_TO_DATE(:fromdate,'%d.%m.%Y') BETWEEN `FromDate` AND `ToDate`;");

如果字段 FromDateToDate 类型是 DATETIME:

$statement = $pdo->prepare("SELECT `id` FROM `booked_cars` WHERE `vhId` = :vhid AND STR_TO_DATE(:fromdate,'%d.%m.%Y') BETWEEN DATE(`FromDate`) AND DATE(`ToDate`);");

上面的查询与 DB Fiddle example.

中使用的查询类似