2009-09-03 96 views
4

我應該如何準備代碼,如果它失敗了?用try-catch語句或?PHP和Postgres:捕獲錯誤?

function delete_question ($question_id) { 
    $dbconn = pg_connect("host=localhost port=5432 dbname=heoa user=heoa password=123"); 

    // removes questions and its dependencies: answers and tags 
    $result = pg_query_params ($dbconn, 
     'DELETE FROM questions 
     WHERE question_id = $1', 
     array ($question_id) 
    ); 

回答

7

如果您想要例外,那麼您需要使用PDO。

在pg_ *函數和您的代碼的情況下,您需要檢查$ result的值是否爲false,如果是,則會發生錯誤。

你可以得到pg_last_error()

像這樣的錯誤描述:

$result = pg_query_params ($dbconn, 
     'DELETE FROM questions 
     WHERE question_id = $1', 
     array ($question_id) 
    ); 


if ($result === false) { 
    print pg_last_error($dbconn); 
} else { 
    print 'everything was ok'; 
} 

所以,基本上,每次你使用PG_ *功能,您需要檢查是否返回false ,這就是這些功能的方式。

是的,你可以建立你自己的包裝,而不是pg_query *你調用my_db_query(),然後做返回值檢查和異常拋出。

或者,您可以使用PDO,它可以拋出所有可能發生錯誤的PDOException。

+0

你的意思是我能趕上pg_last_error沒有明確的投語句? – hhh 2009-09-03 19:12:57

+0

關於該功能的更多信息:http://us.php.net/manual/en/function.pg-last-error.php – hhh 2009-09-03 19:13:31

+1

您可以隨時將自己的例外包裝到pg_ *函數中。 – 2009-09-03 19:13:40

0

我有另一種做法

$result = pg_query_params ($dbconn,'DELETE FROM questions WHERE question_id = $1', array ($question_id)) 
      or die(pg_last_error($dbconn));