在用户输入值sql的日期之间

时间:2014-11-18 23:38:37

标签: php mysql

我有一个表有一个名为hdate的列。我用日期属性设置了它。

我有一张表格:

 <H2>Search By Date</H2></div>
  <form name="attdate" action="datesearch.php" method="post">
      From :<input id="datepicker" name = "startd">   To: <input id="datepicker1" name = "endd">
    <input type="submit" value="Search Records">

现在我的目的是允许用户输入开始日期和结束日期并获取具有这些日期的所有行。

<?php


include 'config.php';

$startd = ($_POST['startd']);
$endd = ($_POST['endd']);


$startd = mysqli_real_escape_string($con,$startd);
$endd = mysqli_real_escape_string($con,$endd);

$sql = "SELECT * FROM handover WHERE hdate  AND  >= '" . $startd . "' AND  <'"     

.$endd.  "' + ‘ 23:59:59’"
;
$result = mysqli_query($con,$sql);

$count=mysqli_num_rows($result);

if($count==0 ){

 echo "</br></br></br></br></br></br></br><p> No Matching results found</p>";
}
else{
while($row = mysqli_fetch_array($result)) {
 echo 'here are your results';

我的日期将进入数据库以获取hdate,并采用datepicker设置的相同格式。

我成功获取查询其他列的结果。有任何想法吗?注意在几个网站上阅读后添加的时间。我已经阅读了有关堆叠的其他问题,但它们与用户输入无关。

使用当前设置进行测试时,我没有收到错误,只是&#34;没有匹配,所以我猜这个查询是有效的,但没有正确设置查询我的hdate列。

我可以轻松更改列,所以如果最简单的解决方案是使用时间戳或其他东西,那么可以这样做。

<?php


include 'config.php';

$startd = ($_POST['startd']);
$endd = ($_POST['endd']);


$startd = mysqli_real_escape_string($con,$startd);
$endd = mysqli_real_escape_string($con,$endd);

$startd = '2014-11-18';
$endd = '2014-11-20';
$sql = "SELECT * FROM handover WHERE hdate >= date('" . $startd . "') AND hdate < 

ADDDATE(date('" . $endd . "'), INTERVAL 1 DAY)";
echo $sql; // run in mys

$result = mysqli_query($con,$sql);

$count=mysqli_num_rows($result);

if($count==0 ){

 echo "</br></br></br></br></br></br></br><p> No Matching results found</p>";
}
else{
while($row = mysqli_fetch_array($result)) {

我仍然只是得到一个&#34;没有比赛&#34;回声

1 个答案:

答案 0 :(得分:0)

假设$startd$endd是基本的MySQL日期格式YYYY-MM-DD,那么:

$sql = "SELECT * FROM handover WHERE hdate >= date('" . $startd . "') AND hdate < ADDDATE(date('" . $endd . "'), INTERVAL 1 DAY)";

否则,在使用上述内容之前,您可能必须执行一些字符串操作才能将$startd$endd重新格式化为YYYY-MM-DD。

我对如何调试这些东西的提示一般是对变量中的一些值进行硬编码并将SQL打印出来,然后在控制台中运行它并弄乱它直到你可以按预期工作:

$startd = '2014-11-18';
$endd = '2014-11-20';
$sql = "SELECT * FROM handover WHERE hdate >= date('" . $startd . "') AND hdate < ADDDATE(date('" . $endd . "'), INTERVAL 1 DAY)";
echo $sql; // run in mysql console and see how it works before moving forward in php

然后在工作之后,升级到使用POST参数并打印出SQL,并且根据它是否与之前的工作相匹配,您将知道它是否正确。

请注意您的SQL语法已经在上面进行了更正,因为您只需要AND两次只需要一次,并且您在第二次AND之后错过了对hdate的引用。