Php 如果给定日期介于两个日期之间,如何选择行?

Php 如果给定日期介于两个日期之间,如何选择行?,php,mysql,Php,Mysql,如果给定的日期仅在表中的两个日期之间,我将尝试选择行 在课程表中,我有开始日期和结束日期 如果可能的话,我还需要在查询中执行条件 $coursneededdate >= startdate AND $coursneededdate <= enddate 问题可能是当变量进入数据库时没有引用字符串变量。也不要引用列名 $coursneededdate = '2020-08-27'; $sql = "SELECT * FROM curriculum where '".$coursnee

如果给定的日期仅在表中的两个日期之间,我将尝试选择行 在课程表中,我有开始日期和结束日期

如果可能的话,我还需要在查询中执行条件

$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"];
    }
}

问题还可能是您正在检查未来5年的日期。你有那么多的数据吗?

首先,你必须对SQL进行故障排除,并确保你“编码”的内容与SQL中预期的内容相同

我建议
echo$sql
查看查询是否对应于mysql,然后在DB中运行它

如果这样做行得通,那么我建议按照chris85的说明,将您的值封装在一个引号中,
$sql=“SELECT*FROM currency where”“。$CourseNeedDate”“,”介于“startdate”和“enddate”之间”;

您的SQL语句计算结果为
从课程中选择*,其中'2020-08-27'介于'startdate'和'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"];
    }
}
您的查询应该类似于

SELECT * FROM curriculum WHERE STR_TO_DATE('2020-08-27','%Y-%m-%d') BETWEEN `startdate` AND `enddate`;
重要提示

如果提供的字符串日期值来自用户生成的输入,则使用字符串连接创建SQL查询会使代码容易受到攻击。

请尝试此操作

$sql = "SELECT * FROM curriculum where date = '" . $coursneededdate  . "' AND date between  '".$startdate."' and '" . $enddate . "'";

得到的错误是什么?引用变量,当它转到DB时,它仍然是一个字符串<代码>从课程中选择*,其中“.$CourseNeededDate.”介于“开始日期”和“结束日期”之间。如果这仍然不能产生结果,请检查您是否提前5年上课?您的问题不太清楚。如果我错了,请纠正我,“仅当某个特定日期的数据介于startdata和enddate之间时,才需要获取该日期的数据”没有错误,查询不保留任何内容。带引号的结果如何?你有那个日期范围内的数据吗?答案很好,但是如果格式是标准的mysql日期格式,那么就不需要
STR\u TO\u date
,显然是这样。仍然站起来:)谢谢你,先生,我可以在查询$CourseNeededDate>=startdate和$CourseNeedEdDate@HussainAlmalki中做这个条件吗?是的,你可以,但这就是BETWEEN语句已经为你做的@Hanky good point。我本来打算+1你提到SQL注入的答案,但是现在它被删除了,所以我更新了这个答案。它成功了,谢谢,但是我需要检查所有的开始和结束日期,以获得这些日期之间的所有数据。现在它只带来一行?我不确定这个问题,它应该返回这些日期范围之间的所有记录。如果在数据库上运行它,会返回多个?如果($result->num\u rows>0),可以尝试取出
if($result->num\u rows>0){
非常感谢它起作用了,我把一个日期放在一行开始日期和结束日期之间。我可以用$CourseNeededDate>=startdate和$CourseNeededDate这样的条件来做吗应该是有效的,但为什么不使用中间值呢?如果你这样做的话,你可能还想把它放在括号里,所以如果你附加了其他东西,它们就不在一起了ped错了。我这样做了,它工作了$sql=“SELECT*FROM currency where'.$courseededdate.'>=startdate和'.$courseededdate。“'我是否可以在查询中设置条件,例如$CourseNeededDate>=startdate和$CourseNeedDate,这是between为您所做的。但是,是的。请不要忘记单引号引用您的变量,并且列名也放在第一位,而不是变量。@HussainAlmalki”