两个日期之间的PHP SQL查询

两个日期之间的PHP SQL查询,php,mysql,sql,Php,Mysql,Sql,我是PHP新手,目前正在编写一个系统,工作人员可以记录轮班,会计部门可以打印要支付的金额等 我需要显示给会计部门成员的表能够查询日期范围。我的代码似乎可以工作,但它只能检索单个日期,而不能检索日期范围 代码如下: $shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN tablename_staff ON tablename_shift.uniqueid = tablename_staff

我是PHP新手,目前正在编写一个系统,工作人员可以记录轮班,会计部门可以打印要支付的金额等

我需要显示给会计部门成员的表能够查询日期范围。我的代码似乎可以工作,但它只能检索单个日期,而不能检索日期范围

代码如下:

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date BETWEEN '".$_POST['to_date']."' AND '".$_POST['from_date']."'
ORDER by shiftid ASC")
由于代码适用于单个日期范围,我最初的想法是错误可能在于如何存储日期。我最初将它们存储为VARCHAR(30),格式为DD/MM/YY,后来将其改为DATE,格式为yyy/MM/DD,以兼容MySQL存储日期的方式


任何帮助都将不胜感激

Mysql-between希望第一个日期更小,即从-到,所以试试这个

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date BETWEEN '".$_POST['from_date']."' AND '".$_POST['to_date']."'
ORDER by shiftid ASC")

假设工作人员选择了一个人类可读的日期,即07-01-2014,那么您需要使用此日期(但采用mysql日期格式)对数据库进行测试

在执行查询之前,您需要更改日期,如下所示

$startDate = date("Y-m-d", strtotime($_POST['from_date']));
$endDate = date("Y-m-d", strtotime($_POST['to_date']));

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE 
shift_date BETWEEN '".$startDate."' AND '".$endDate."'
ORDER by shiftid ASC")
但是,您的起始日期必须是查询中的第一个

还要小心可怕的mysql注入

您也可以试试这个。
you can try this as well.

$shiftdata = mysqli_query($connection, "SELECT * FROM tablename_shift INNER JOIN 
tablename_staff ON tablename_shift.uniqueid = tablename_staff.uniqueid WHERE
shift_date >= '".$_POST['to_date']."' AND  shift_date <='".$_POST['from_date']."'
ORDER by shiftid ASC")
$shiftdata=mysqli\u query($connection,“SELECT*fromtablename\u shift-internal-JOIN tablename\u staff ON tablename\u shift.uniqueid=tablename\u staff.uniqueid其中
shift_date>='“$_POST['to_date']”和shift_date您的代码是非常脆弱的。不管怎样,只要您的POST变量(我再次指出,不应在没有卫生设施的情况下直接将其放入查询中)就可以使用格式正确。请将数据类型更改为date或datetime。您的表结构现在如何…您现在是否将它们存储在日期类型字段而不是varchar中…它们现在是否可以存储…以及旧值,您是否将它们转换为新格式?如果您知道如何改进代码的漏洞,请详细说明。这是一个广泛讨论的主题。请参阅准备好的语句和sql注入谢谢,这很有效。我使用了WHERE shift_date>'“$POST['from_date']”和shift_date<'”。$POST['to_date']但我更喜欢这种方式。