【问题标题】:PHP SQL Query between 2 dates2个日期之间的PHP SQL查询
【发布时间】:2014-01-25 05:12:59
【问题描述】:

我是 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")

由于代码适用于单日期范围,我最初的想法是错误可能在于我存储日期的方式。我最初以 DD/MM/YY 格式将它们存储为 VARCHAR(30),后来将其更改为 YYYY/MM/DD 格式的 DATE,以与 MySQL 存储日期的方式兼容。

任何帮助将不胜感激。

【问题讨论】:

  • 您的代码极易受到攻击。无论如何,只要您的帖子变量(我再次指出不应该在没有卫生条件的情况下直接放入查询中)格式正确,这应该可以工作。
  • 将数据类型更改为日期或日期时间。
  • 您的表结构现在如何...您现在是否将它们存储在日期类型字段而不是 varchar 中...它们现在存储是否正常...以及旧值,您呢将它们转换为新格式?
  • 如果您知道如何改进我的代码的漏洞,请详细说明。
  • 这是一个被广泛讨论的话题。查看prepared statements和sql注入

标签: php mysql sql


【解决方案1】:

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

【讨论】:

  • 谢谢,这成功了。我让它与 WHERE shift_date > '".$_POST['from_date']."' AND shift_date
【解决方案2】:

假设工作人员选择了一个人类可读的日期,即 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 注入!

【讨论】:

    【解决方案3】:
    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")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 2019-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多