2014-07-21 41 views
0

我可以使用一些幫助瞭解奇怪的情況。我有一個postgres數據庫'服務器'與ip(inet)和加載(整數)列。我可以通過psql手動更新裝載值,如下所示:PHP無法在Postgres數據庫中增加值

UPDATE servers 
    SET load = load + 100 
WHERE ip = '10.10.10.10'; 

我寫了一個php腳本來自動加載更新。但是,'value = value + x'語法現在不適用於我。

這個工程:

pg_query($conn, "UPDATE servers SET load = 100 WHERE ip = '10.10.10.10'"); 

這並不:

pg_query($conn, "UPDATE servers SET load = load + 100 WHERE ip = '10.10.10.10'"); 

使用後者時,腳本無限期掛起沒有給予迴應。我嘗試了各種變體,例如在最後添加or die(pg_last_error())子句。我也嘗試使用pg_preparepg_execute聲明。仍然沒有輸出,也沒有改變數據庫。

我錯過了什麼嗎?有沒有簡單的方法來解決這個問題(我寧願不使用單獨的查詢來獲取加載,以便我可以將它加回來)。

+1

顯示你創建的表SQL。 –

+0

如果您在'psql'中連接到PostgreSQL而掛起並且'select * from pg_stat_activity',那麼您是否在那裏看到該查詢?它是「等待= t」嗎? –

+0

@DwayneTowell:根據每項工作政策,我無法提供有關數據庫的詳細信息。 :/如前所述,我正在使用的列是一個inet列和一個整數列。 – vastlysuperiorman

回答

0

我已經解決了這個問題。我不確定爲什麼這是一個問題,但事實證明,無論如何,最佳實踐最終幫助解決了這個問題。

代替運行單個pg_query,我設置了適當的變量並使用了pg_query_params。無論問題如何,這可能都是一個好主意。

$myQuery = "UPDATE servers SET load = load + $1 WHERE ip = '$2'"; 
$serverIP = '10.10.10.10'; 
$loadAdded = '1234'; 
$result = pg_query_params($conn, $myQuery, array($loadAdded, $serverIP)); 

同樣,我不知道爲什麼這解決了我的問題,但它確實如此。