一周两个约会php

时间:2012-04-24 21:33:19

标签: php mysql date

我有以下情况: 从今天开始,患者每周可以进行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'

仍有PhpMyAdmin给出0个结果,而有超过10个记录。

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.

有人在我的查询中看到了什么错误吗?

提前致谢。

3 个答案:

答案 0 :(得分: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 injection攻击。使用prepared statement。它们也更好阅读,并在字符串字段etcera中转义单引号和反斜杠。

答案 1 :(得分:0)

来自MYSQL Doc:

  

为了在将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);

答案 2 :(得分:0)

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

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