如果给定日期仅在表格中的两个日期之间,我正在尝试选择行 在课程表中,我已经开始并结束了。
如果可能的话,我还需要在查询中做条件
$coursneededdate >= startdate AND $coursneededdate <= enddate
这是我的代码,任何帮助都将受到高度赞赏。
$coursneededdate = '2020-08-27';
$sql = "SELECT * FROM curriculum where ".$coursneededdate." between 'startdate' and 'enddate'";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["curriculum_id"];
}
}
答案 0 :(得分:6)
您的SQL语句的计算结果为SELECT * FROM curriculum where '2020-08-27' between 'startdate' and 'enddate'
,其中包含所有字符串值且没有日期。
提供的参数以字符串形式开始,因此您需要使用STR_TO_DATE将其转换为日期值。表中的列名不应该在引号中。您有时会看到用于指定列名的后引号。
您的查询应该是
SELECT * FROM curriculum WHERE STR_TO_DATE('2020-08-27','%Y-%m-%d') BETWEEN `startdate` AND `enddate`;
重要提示
如果提供的字符串日期值来自用户生成的输入,则创建带有字符串连接的SQL查询会使代码容易受到SQL Injection的攻击。</ p>
答案 1 :(得分:3)
问题可能是你没有引用变量,当它转到你的数据库时是一个字符串。也不要引用列名。
$coursneededdate = '2020-08-27';
$sql = "SELECT * FROM curriculum where '".$coursneededdate."' between startdate and enddate";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo $row["curriculum_id"];
}
}
问题还可能在于您正在检查未来5年的日期。你有远远的数据吗?
答案 2 :(得分:0)
首先,您必须解决SQL问题并确保“已编码”的内容与SQL中的预期相同。
我建议echo $sql;
查看查询是否与mysql对应,然后在DB本身运行。
如果有效,那么我建议做chris85所说的是将你的价值包装在一个单引号内$sql = "SELECT * FROM curriculum where '".$coursneededdate."' between 'startdate' and 'enddate'";
答案 3 :(得分:0)
试试这个
$sql = "SELECT * FROM curriculum where date = '" . $coursneededdate . "' AND date between '".$startdate."' and '" . $enddate . "'";