【问题标题】:PHP and Postgres: catching errors?PHP 和 Postgres:捕捉错误?
【发布时间】:2010-11-25 09:49:56
【问题描述】:

如果出现故障,我应该如何准备代码?用 try-catch 语句还是?

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 )
    );

【问题讨论】:

    标签: php postgresql error-handling


    【解决方案1】:

    如果你想要异常,那么你需要使用 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,这些函数就是这样。

    是的,您可以构建自己的包装器,因此您可以调用 my_db_query() 而不是 pg_query*,然后它会执行返回值检查和异常抛出。

    或者,您可以使用 PDO,它能够为所有可能发生的错误抛出 PDOException。

    【讨论】:

    • 你的意思是我可以在没有明确的 throw-statement 的情况下捕获 pg_last_error?
    • 您始终可以将自己的异常包装在 pg_* 函数周围。
    • 你并不真的需要 if-else 中的“else”,因为抛出异常会使你脱离函数。
    • (指的是pastebin链接,不是上面的答案)
    • @nilamo:break-command 与错误消息一起使用更好还是 throw-command 与 catch-command 一起使用更好?
    【解决方案2】:

    我还有一个练习

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

    【讨论】:

      猜你喜欢
      • 2014-04-18
      • 1970-01-01
      • 2015-03-28
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多