繁体   English   中英

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

[英]How to select rows if given date is between two dates?

如果给定日期仅在表格中的两个日期之间,我正在尝试选择行。在课程表中,我有startdate和enddate。

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

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


    }
}

您的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注入攻击。

问题可能是你没有引用变量,当它进入你的数据库时是一个字符串。 也不要引用列名。

$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 curriculum where '".$coursneededdate."' between 'startdate' and 'enddate'";

尝试这个

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM