我有以下情况: 从今天开始,患者每周可以进行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.
有人在我的查询中看到了什么错误吗?
提前致谢。
答案 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'