Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有时间的情况下指定PHP MYSQL日期_Php_Mysql_Mysqli - Fatal编程技术网

如何在没有时间的情况下指定PHP MYSQL日期

如何在没有时间的情况下指定PHP MYSQL日期,php,mysql,mysqli,Php,Mysql,Mysqli,这非常有效: SELECT DISTINCT customers FROM customertable WHERE time_paid BETWEEN '2016-06-28 10:27:55' AND '2016-07-05 14:07:51'; 但是,由于我使用javascript datepicker让用户选择日期周期,并且只有日期但没有时间,这显然不起作用: SELECT DISTINCT customers FROM customertable WHERE time_paid

这非常有效:

SELECT DISTINCT customers 
FROM customertable 
WHERE time_paid BETWEEN '2016-06-28 10:27:55' AND '2016-07-05 14:07:51';
但是,由于我使用javascript datepicker让用户选择日期周期,并且只有日期但没有时间,这显然不起作用:

SELECT DISTINCT customers 
FROM customertable 
WHERE time_paid BETWEEN '2016-06-28' AND '2016-07-05';
我的select语句是:$t1是较低的日期,$t2是较高的日期

$sql = "SELECT DISTINCT customertable FROM customer WHERE time_paid BETWEEN '$t1' AND '$t2'";

$result = mysqli_query($conn, $sql);
$rowcount = mysqli_num_rows($result);

有没有办法在select语句中插入一个连接的日期,例如“$t1”。12.00.00,以便在选择时处理数据库中的完整日期时间项?

如果查询中的日期没有时间值

您可以将datetime值除以空格,然后检查它是否有时间

如果没有时间参数,那么只需添加00:00:00和23:59:59

请参见此示例:

function getCustomers($from, $to) {
  $from = explode(' ', $from);
  if(sizeof($from) != 2) {
    $from = $from[0]. ' 00:00:00';
  }

  $to = explode(' ', $to);
  if(sizeof($to) != 2) {
    $to = $to[0]. ' 23:59:59';
  }

   // re-parsing datetime values to prevent sql injection 
  $from = date('Y-m-d H:i:s', strtotime($from));
  $to = date('Y-m-d H:i:s', strtotime($to));

  $q =   
    "SELECT DISTINCT customers 
    FROM customertable 
    WHERE time_paid >= '".$from."' AND time_paid <= '".$to."'";

  // and so on...  
}
函数getCustomers($from,$to){ $from=爆炸(“”,$from); 如果(sizeof($from)!=2){ $from=$from[0]。'00:00:00'; } $to=爆炸(“”,$to); 如果(sizeof($to)!=2){ $to=$to[0]。'23:59:59'; } //重新分析datetime值以防止sql注入 $from=日期('Y-m-d H:i:s',标准时间($from)); $to=日期('Y-m-d H:i:s',标准时间($to)); $q= “选择不同的客户 来自customertable 其中时间支付>=“$from.”和时间支付
  • 永远不要在SQL语句中使用字符串插值。SQL注入攻击就是这样发生的。请改用占位符

  • 修改javascript日期选择器生成的格式以包含时间

  • 和/或

  • 如果输入的日期字符串中没有时间组件,则向其添加时间组件

  • (1) 它怎么不起作用呢?日期格式很好。(2)为什么不使用参数化查询?不应该在查询字符串中嵌入参数值。用户应该使用javascript日期选择器日历来选择日期间隔。但是,日期选择器只有月份的日期,没有时间。只处理日期和时间,而不处理日期。是否确定日期选择器返回日期格式
    YYYY-MM-DD
    ?只需确保从JS端以正确的格式提供
    $t1
    $t2
    ,并且正如Gordon所说,您应该使用准备好的语句来代替
    ,在“$t1 00:00:00”和“$t200:00:00”之间支付的时间应该可以正常工作。您尝试过吗?