我在符合条件的数据库中有3条记录但是当我使用between子句运行查询时,它获得了0条记录。
$current_date = date('m-d-Y', strtotime('monday this week'));
$upcoming_date = date('m-d-Y', strtotime('monday next week'));
$sql = mysqli_query($connection, "SELECT * FROM result WHERE test_date BETWEEN $current_date AND $upcoming_date AND login = '".$_SESSION['uid'] ."'");
$total_check = mysqli_num_rows($sql);
这是我的数据库
result_id`, `login`, `test_id`, `test_date`,
(1, '2', 6, '08-03-2016',
(2, '2', 5, '08-03-2016',
(3, '2', 3, '08-03-2016',
请告诉我在哪里以及我做错了什么,因为我得到0结果而$ _SESSION ['uid']是2
答案 0 :(得分:3)
您应该将'
用于$ current_date AND $ coming_date
"SELECT * FROM result WHERE test_date BETWEEN '$current_date' AND '$upcoming_date' AND login = '".$_SESSION['uid'] ."'"
使用下面的准备语句来避免SQL Injection
$stmt = $dbConnection->prepare('SELECT * FROM employees WHERE name = ?');
$stmt->bind_param('s', $name);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
答案 1 :(得分:1)
如果要在BETWEEN
等范围搜索中使用日期,则错误地存储日期。您必须将它们存储在DATE
列中。将它们存储在VARCHAR()列中是一个坏主意。
您可以使用STR_TO_DATE()
来解决错误设计的表格。
$current_date = date('Y-m-d', strtotime('monday this week'));
$upcoming_date = date('Y-m-d', strtotime('monday next week'));
$sql = mysqli_query($connection, "SELECT * FROM result WHERE STR_TO_DATE(test_date,'%d-%m-%Y') BETWEEN '$current_date' AND '$upcoming_date' AND login = '".$_SESSION['uid'] ."'");
要求MySQL比较字符串01-01-2016
和12-31-2015
,并确定后者在前者不合理之前出现。字符串比较是词汇。但是,2015-12-31
显然出现在2016-01-01
之前。
要做到这一点有点棘手,因为文本字符串08-08-2016
确实在08-15-2016
之前出现了。但是在年底,事情就崩溃了。