2014-01-07 53 views
0

我是新来的PHP,目前编码一个系统,工作人员可以记录转移,帐户部门可以打印到支付等金额PHP SQL查询日期间的2

我需要我的表,该表显示成员的账户部门可以使用日期范围进行查询。我的代码似乎工作,但它只能检索单个日期,而不是日期范围。

下面是代码:

$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") 

随着代码工作单的日期范围,我最初的想法是错误可能在于我是如何存储的日期。我最初以DD/MM/YY的格式将它们存储为VARCHAR(30),并且后来以YYYY/MM/DD的格式将它们更改为DATE,以便与MySQL存储日期的方式兼容。

任何帮助,将不胜感激。

+1

你是代码非常脆弱。无论如何,只要你的post变量(我指出的不应该直接放在没有卫生设施的查询中),它应该是正确的格式。 – Ryan

+0

将数据类型更改为日期或日期时间。 – AgRizzo

+0

现在你的表结构如何...你现在将它们存储在一个日期类型字段中而不是varchar中......它们现在存储得很好......以及旧值,是否将它们转换为新格式? – Hackerman

回答

1

MySQL之间的希望第一次约会要小一些,即从 - 到,那么试试这个

$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") 
+0

谢谢,这工作。我使用WHERE shift_date>'“。$ _ POST ['from_date']。''AND shift_date <'”。$ _ POST ['to_date']但我更喜欢这种方式。 –

0

想必人员选择人类可读的日期即2014年7月1日,那么你需要竞猜数据库使用这个日期,但在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注入!

0
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")