2010-04-21 41 views
0

我們有一個Web應用程序在工作時與Postgres SQL數據庫交談 - 我已經在服務器上設置了很多約束來保持數據的一致性,但是我們在報告中遇到了很多問題,以防止用戶輸入他的(無效的)數據在給定的時刻。違反PHP Postgres約束條件 - 我能否以某種方式獲得約束名稱?

我們唯一可以得到的是「約束違規」,但這不是很具描述性,從perl或直接從PGAdmin我們可以得到關於哪個約束導致失敗的信息(約束的名稱) - 有沒有辦法在PHP中做同樣的事情?

我們能夠升級PHP或使用不同的數據庫訪問模塊,如果它有幫助,我有興趣知道是否可以使用任何可以安全推薦的方法。

+0

謝謝你們 - 這也引導了我們(迫使我們看起來更難;))在PEAR中找到getUserInfo方法,使我們能夠使用當前的解決方案獲取描述。 感謝aswers,讓我們離開問題滾動,我會在幾天內接受頂級投票答案。 – RnR 2010-04-21 12:19:26

回答

2

您最好使用pg_result_error_field,該功能爲您提供有關錯誤的更多詳細信息。如果您使用存儲過程並讓這些拋出異常(包括DETAIL's and HINT's),那麼在代碼中進行錯誤處理將非常簡單。

0

使用pg_last_error

$c = pg_connect('service=example'); 
$q = 'INSERT INTO example VALUES ($1, $2)'; 

$s = pg_query_params($c, $q, array('XXX',2.2222)); 
echo pg_last_error($c); 

我得到:

ERROR: duplicate key value violates unique constraint "example_example_key" 

"example_example_key"是有問題的約束的名稱。