0

我有以下情况: 从今天开始,一个患者可以每周进行 2 次在线预约。

我的代码是:

$user_id = $_SESSION['id'];
$datum1 = date("d-n-Y");
$datum2 = date("d-n-Y", strtotime(date("Y-m-d", strtotime($datum)) . " +7 days"));
$query = "SELECT * FROM afspraken WHERE user_id='$user_id' AND datum BETWEEN '$datum1' AND '$datum2'";

带有值的查询:

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN '24-4-2012' AND '01-5-2012'

当有超过 10 条记录时,PhpMyAdmin 仍然给出 0 个结果。

id  user_id datum   begintijd   opmerking
55  2   24-4-2012   9:30    Deze afspraak is online gemaakt.
56  2   24-4-2012   10:00   Deze afspraak is online gemaakt.

有人看到我的查询有什么问题吗?

提前致谢。

4

3 回答 3

1

您可以通过将日期表示错误留给 MySQL 来排除它。

$query = "SELECT * FROM afspraken WHERE user_id='$user_id' AND datum BETWEEN CURRENT_DATE AND DATE_ADD(CURRENT_DATE, INTERVAL 1 WEEK)";

一般来说,您可能需要格式“YYYY-MM-DD”。

另一件事:您的代码易受SQL 注入攻击。使用准备好的语句。它们也更易于阅读,并且在字符串字段等中转义单引号和反斜杠。

于 2012-04-24T21:45:04.847 回答
0

来自 MYSQL 文档:

为了在将 BETWEEN 与日期或时间值一起使用时获得最佳结果,请使用 CAST() 将值显式转换为所需的数据类型。

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_between

WHERE我会尝试在您的子句中将日期转换为 DATE MySQL 数据类型。

因此,将您的查询更改为:

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN CAST('24-4-2012' AS DATE) AND CAST('01-5-2012' AS DATE);
于 2012-04-24T21:36:57.770 回答
0

首先检查数据库中的“基准”字段是否为日期字段。像这样替换您的查询:

SELECT * FROM afspraken WHERE user_id='2' AND datum BETWEEN '24/4/2012' AND '01/5/2012'
于 2012-04-24T21:39:19.887 回答