2010-02-25 44 views
1

運行下面的代碼:使用時間戳類型與pg_prepare

$preCallMatch = pg_prepare($dbcp, 'callMatch', 
          "SELECT duration 
           FROM voip_calls 
           WHERE system_id = $1 
           AND call_start => $2         
           AND call_start <= $3 
           AND destination = $4"); 

我收到以下錯誤:

Warning: pg_prepare(): Query failed: ERROR: operator does not exist: timestamp without time zone => "unknown" 
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts. in /home/www/dinesh/UPSReconcileZeroSecondCalls.php on line 38 

我試圖以這種方式,沒有運氣鑄造$ 2:

$preCallMatch = pg_prepare($dbcp, 'callMatch', 
          "SELECT duration 
           FROM voip_calls 
           WHERE system_id = $1 
           AND call_start => CAST ($2 AS TIMESTAMP) 
           AND call_start <= CAST ($3 AS TIMESTAMP) 
           AND destination = $4"); 


Warning: pg_prepare(): Query failed: ERROR: operator does not exist: timestamp without time zone => timestamp without time zone 
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts. in /home/www/dinesh/UPSReconcileZeroSecondCalls.php on line 38 

來自voip_calls表的列類型:

call_start  | timestamp without time zone | 
call_end  | timestamp without time zone | not null 

關於我在做什麼的錯誤提示?請注意,PDO或MDPD現在不是一個選項。

版本的軟件:

ii php5       5.2.6.dfsg.1-1+lenny3  server-side, HTML-embedded scripting languag 
ii libapache2-mod-php5    5.2.6.dfsg.1-1+lenny3  server-side, HTML-embedded scripting languag 
ii php5-pgsql      5.2.6.dfsg.1-1+lenny3  PostgreSQL module for php5 
ii libpq5       8.3.8-0lenny1    PostgreSQL C client library 
postmaster (PostgreSQL) 8.1.4 

回答

0

這可能是你=>運營商造成的問題 - 嘗試> =代替。

另外作爲一個提示,我發現寫$ 2 :: timestamp而不是CAST($ 2 as TIMESTAMP)更容易 - 它是PostgreSQL特有的語法,但對於我來說讀取更好(並且鍵入更少;-))

+0

是的,你說得對。操作員錯字再次觸擊。 – dinesh

0

原來是< =和=>運算符。做到這一點很好:

$preCallMatch = pg_prepare($dbcp, 'callMatch', 
          "SELECT duration 
           FROM voip_calls 
           WHERE system_id = $1 
           AND call_start BETWEEN $2 AND $3 
           AND destination = $4");