PHP/PDO 无法绑定 'TIMESTAMP WITHOUT TIME ZONE' 值
问题:PHP/PDO 无法绑定 'TIMESTAMP WITHOUT TIME ZONE' 值 我正在尝试使用 PHP 的 PDO 库准备和执行对我的 PostgreSQL 数据库的查询,但它没有按预期工作。 使用命令行psql客户端时,以下内容按预期工作: => SELECT TIMESTAMP WITHOUT TIME ZONE '2013-01-01 00:00:00'; timestamp
·
问题:PHP/PDO 无法绑定 'TIMESTAMP WITHOUT TIME ZONE' 值
我正在尝试使用 PHP 的 PDO 库准备和执行对我的 PostgreSQL 数据库的查询,但它没有按预期工作。
使用命令行psql
客户端时,以下内容按预期工作:
=> SELECT TIMESTAMP WITHOUT TIME ZONE '2013-01-01 00:00:00';
timestamp
---------------------
2013-01-01 00:00:00
(1 row)
但是,我似乎无法使用 PHP/PDO 做同样的事情。以下代码:
<?php
try
{
$db = new PDO(...);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare("SELECT TIMESTAMP WITHOUT TIME ZONE ?;");
$stmt->bindValue(1, "2013-01-01 00:00:00", PDO::PARAM_STR);
$stmt->execute();
$row = $stmt->fetch();
echo $row[0];
}
catch(PDOException $e)
{
die($e->getMessage());
}
?>
产生以下错误:
SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "$1" LINE 1: SELECT TIMESTAMP WITHOUT TIME ZONE $1; ^
我知道 PostgreSQL 的to_timestamp()
函数,它确实工作,但它返回一个TIMESTAMP WITH TIME ZONE
代替 - 问题是to_timestamp
不是一个不可变的函数(即,不会根据服务器的时区配置返回不同的结果)。
同样,绑定以下内容可以满足我的要求,并且可以成功准备:
SELECT to_timestamp(?, 'YYYY-MM-DD HH24:MI:SS')::TIMESTAMP WITHOUT TIME ZONE;
但我希望有一些更干净/不那么冗长的东西。
我只是错误地准备了我的语句,或者如果这永远不会起作用,那么从我的应用程序中的字符串到 PostgreSQL 中的TIMESTAMP WITHOUT TIME ZONE
的替代方法是什么?
解答
尝试直接转换它,带括号以避免混淆 PDO/Postgres:
(?)::timestamp
更多推荐
已为社区贡献19918条内容
所有评论(0)