2

我试图在一天的时间段内选择一个日期。像这样的简单查询就可以解决问题:

SELECT * 
FROM table_name
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)

我的问题是我正在使用带有 pg_execute/PDO 的准备好的语句(两者的问题是相同的)。例如:

$query = "SELECT * 
FROM table_name
WHERE table_name.the_date > $1";

    $params = array('DATE_SUB(CURDATE(), INTERVAL 1 DAY)')

    $results = pg_prepare($dbconn, '' , $query );

    $results = pg_execute($dbconn, '', $params);

结果是它总是出错:

pg_execute(): Query failed: ERROR: invalid input syntax for type timestamp:

现在我可以使用特殊的 postgres 函数,如以下链接所示:http ://www.postgresql.org/docs/9.0/static/datatype-datetime.html#AEN5582 。现在我已替换NOW()为特殊输入 'now' ,但 'INTERVAL 1 DAY' 仍然存在错误。

我怎样才能解决这个问题?

4

1 回答 1

1

我不明白你为什么要在这里使用绑定变量。

你可以简单地做:

$query = "SELECT * 
          FROM table_name
          WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY)";

$params = array();
$results = pg_prepare($dbconn, '' , $query);
$results = pg_execute($dbconn, '', $params);

如果您想要更改间隔的能力,您仍然必须对任何语法元素进行硬编码,尽管您应该能够动态配置间隔的大小

$query = "SELECT * 
          FROM table_name
          WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL $1 DAY)";

$params = array('1');
$results = pg_prepare($dbconn, '' , $query);
$results = pg_execute($dbconn, '', $params);
于 2013-09-29T15:13:36.953 回答