【问题标题】:Get a date from HTML date form and insert it into a PostgreSQL table using PHP从 HTML 日期表单中获取日期并使用 PHP 将其插入到 PostgreSQL 表中
【发布时间】:2016-01-31 19:42:37
【问题描述】:

我有一个带有日期的 HTML 表单

<input type="date" name="mydate">

这就是它的样子:

我的 PHP 脚本在表单提交时启动。它或多或少看起来像这样:

$mydate = $_POST['mydate'];
$query = "insert into datetable(when) values({$mydate})";
$res = pg_query($db, $query);

它只是不起作用。当我尝试在我的 psql CLI 中手动运行生成查询时,我收到如下错误:

ERROR:  column "when" is of type date but expression is of type integer 
LINE 1: ..., when) values (1990-01-01...
                           ^ 
HINT:  You will need to rewrite or cast the expression.

但是我不知道该怎么做。

我尝试在 PHP 中使用 date() 和 timetostr 转换 mydate。我也试过用to_char(), to_date() 做点什么。但是我仍然无法做任何事情来让它运行......

【问题讨论】:

  • 您应该阅读有关 SQL 注入的内容。
  • 使用pg_query_params 或添加撇号。

标签: php forms postgresql date sql-insert


【解决方案1】:

您应该将日期作为字符串传递。几个例子。

$mydate = pg_escape_literal($_POST['mydate']);
/*        ^^^^^^^^^^^^^^^^^ */
$query = "insert into datetable(when) values({$mydate})";
$res = pg_query($db, $query);


$mydate = pg_escape_string($_POST['mydate']);
/*        ^^^^^^^^^^^^^^^^                   v         v */
$query = "insert into datetable(when) values('{$mydate}')";
$res = pg_query($db, $query);


$mydate = $_POST['mydate'];
$query = "insert into datetable(when) values($1)";
/*     vvvvvvvvvvvvvvv              vvvvvvvvv^^ */
$res = pg_query_params($db, $query, [$mydate]);

http://php.net/manual/en/function.pg-escape-literal.php
http://php.net/manual/en/function.pg-escape-string.php
http://php.net/manual/en/function.pg-query-params.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-10
    • 2015-07-26
    • 2013-04-14
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多