2
我正在嘗試使用PHP的PDO庫準備並執行對我的PostgreSQL數據庫的查詢,並且它不按預期工作。PHP/PDO無法綁定'TIMESTAMP WITHOUT TIME ZONE'值
當使用命令行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
ISN不可變的功能(即,根據服務器的時區配置不返回不同的結果)。
同樣,結合下面我想要做什麼,並且可以成功製備:
SELECT to_timestamp(?, 'YYYY-MM-DD HH24:MI:SS')::TIMESTAMP WITHOUT TIME ZONE;
但我希望的東西更清潔/更簡潔。
難道我只是不正確地準備我的陳述,或者如果這永遠不會工作,從我的應用程序中的字符串到PostgreSQL中的TIMESTAMP WITHOUT TIME ZONE
的替代方法是什麼?
這精美的作品。謝謝!我很想提出一個針對PDO的錯誤 - 或者是語法'timestamp'2013-01-01 00:00:00''不是*意圖*因某種原因而工作? – CmdrMoozy
我不確定它是否打算在沒有顯式轉換操作符的情況下工作,即使如此,您仍然可能需要在Postgres和其他適配器中使用括號(需要嘗試驗證,我會承認我沒有。) –