【问题标题】:Select records (in postgresql with php) between two dates in one column based on input根据输入选择一列中两个日期之间的记录(在带有 php 的 postgresql 中)
【发布时间】:2017-11-06 08:39:37
【问题描述】:

我在选择一些日期时遇到问题,这里是 html 和 php 代码:

 <div id = "date">

    <form action = "selectdate.php" method = "POST">
        From date: <input type = "date" name = "date" required>
        <input type = "date" name = "referer" style = "display: none" value = "<?=$date?>">
        <br />
        <br />
        To date: <input type = "date" name = "date" required>
        <input type = "date" name = "referer" style = "display: none" value = "<?=$date?>">     
        <input type = "submit" name = "submit" value = "get data">
  <br/>
    </form>

和php

    $result = pg_exec("SELECT kv.ph, kv.date FROM public.kv WHERE date BETWEEN
 '" . $_POST['date'] . "' AND  '" . $_POST['date']. "' ORDER BY date");

结果只有一条记录,只显示上次输入日期的记录。我想显示这两个日期之间的记录。 还有一个问题,为什么 WHERE 运算符不适用于文本列?我正在使用 php 5.5。非常感谢。

【问题讨论】:

标签: php sql postgresql


【解决方案1】:

您的问题在于您正在重复使用name="date" 的 HTML 表单。

我不确定哪个字段实际上会给出值,但其中一个会覆盖另一个。所以你本质上是在说

select column from table where date between [date] and [same date]

重命名您的字段以在表单中具有唯一名称(例如 &lt;input name="date_from"... &lt;input name="date_to"... 并将它们用作 $_POST['date_from'] / $_POST['date_to']

除此之外,您还真的需要考虑使用参数化查询,因为您的代码极易受到injection attacks 的攻击。

PHP Postgres 库附带了方便的 pg_query_params function 来为您处理这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    相关资源
    最近更新 更多