【问题标题】:MYSQL query from input (datetime_local) field来自输入(datetime_local)字段的MYSQL查询
【发布时间】:2016-08-17 10:01:08
【问题描述】:

mysql 查询有问题:

$req=mysql_query("
  SELECT Device_Type, Device_Number, sum(Ok) as Ok, sum(Rejected) as Rejected, sum(QC_Rejected) as QC_Rejected
  FROM `Iteration_TotalStats`
  where Line_Id = $line and Device_Number IN ($dev) and time > '$datest' and time < '$daten'
");

变量进入“for”循环:

  • $dates=$_POST['date_start'];
  • $daten=$_POST['date_end '];

除了带有变量的时间参数($dates$datee)外,一切正常。 此处输入:

<input type="datetime-local" name="date_start" value="2016-04-19T09:00"></input>
<input type="datetime-local" name="date_end" value="2016-04-19T21:00"></input>

但是当我像这样在 mysql 查询中直接输入这个日期和时间格式时:

time > '2016-04-19T09:00' and time < '2016-04-19T21:00'

它工作正常。我不知道为什么它不适用于变量。请帮忙。

【问题讨论】:

  • 不要再使用mysql函数。您的代码对 sql 注入是开放的。你真的应该使用 PDO 和准备好的语句! php.net/manual/en/pdo.prepared-statements.php
  • 感谢您的建议。我很快就会重写它。
  • 建成后能否回应您的要求?那它是什么样子的呢?
  • @Stan, echo $datest 渲染:2016-04-19T09:00

标签: php mysql input


【解决方案1】:

我终于找到了解决办法。 在 mysql 查询中,如果这样做:

  SELECT Device_Type, Device_Number, sum(Ok) as Ok, sum(Rejected) as Rejected, sum(QC_Rejected) as QC_Rejected, DATE_FORMAT(time, '%Y-%m-%dT%H:%i') 
FROM `Iteration_TotalStats` where Line_Id = $line and Device_Number IN ($dev) and time > '$ds' and time < '$de'

现在我使用没有绑定的mysqli,它工作正常。

【讨论】:

    【解决方案2】:

    只是为了让您走上 Richt 轨道,并表明 PDO 一旦您习惯了就不会那么难,我继续将您的代码转换为 PDO:

    $qry = $db->prepare(
        'SELECT '
            . 'Device_Type, '
            . 'Device_Number, '
            . 'sum(Ok) as Ok, '
            . 'sum(Rejected) as Rejected, '
            . 'sum(QC_Rejected) as QC_Rejected '
        . 'FROM `Iteration_TotalStats` '
        . 'WHERE Line_Id = :line '
            . 'AND Device_Number IN ($dev) '
            . 'AND time > :start '
            . 'AND time < :end'
    );
    
    $qry->bindParam(':line', $line);
    $qry->bindParam(':start', $_POST['date_start']);
    $qry->bindParam(':end', $_POST['date_end']);
    
    $result = $qry->execute();
    

    显然,您必须首先实例化 $db 变量,但这只是一个 PDO 实例,应该从手册中明确:http://php.net/manual/en/pdo.construct.php

    如果这能解决您的问题,请告诉我。如果有任何不清楚的地方,请随时询问。

    【讨论】:

    • 同样的事情它没有显示任何东西。 print_r($qry) 显示:PDOStatement Object ([queryString] => SELECT Device_Type, Device_Number, sum(Ok) as Ok, sum(Rejected) as Rejected, sum(QC_Rejected) as QC_Rejected FROM Iteration_TotalStats WHERE Line_Id = :line AND Device_Number IN (:devn) AND time > :start AND time
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    相关资源
    最近更新 更多