捕获错误和PostgreSQL到PHP(catching errors from Postgresq

2019-09-22 06:49发布

我想捕捉和显示错误(的方式,我选择)使用PHP网页上查询。 因此,而不是下面的代码

$result=pg_query($connection,$query);

if($result){
    //success

}
else{
    echo pg_last_error($connection);
}

我可以用这样的错误代码匹配或别的东西,实现的事情等的方法

if(error equals duplicate value error){
 echo "this value already exists";
}
else if(error equals different type error){
 echo "You should enter wrong type for column blabla"
}

请注意,我使用PostgreSQL

Answer 1:

这是可能的检索要求标准SQLSTATE ERRCODE,但有一招:查询已通过异步发送pg_send_query() ,而不是同步pg_query() 这是因为pg_query()返回false的错误,而不是被要求在错误的详细信息偷看资源。

当pg_get_result()后调用pg_send_query ,它无论如何都会阻止,直到查询完成,所以相比同步情况下,它并没有真正复杂的事情。 它返回它可以充分利用精确的错误处理的结果。

例:

if (pg_send_query($db, $query)) {
  $res=pg_get_result($db);
  if ($res) {
    $state = pg_result_error_field($res, PGSQL_DIAG_SQLSTATE);
    if ($state==0) {
      // success
    }
    else {
      // some error happened
      if ($state=="23505") { // unique_violation
        // process specific error
      }
      else {
       // process other errors
      }
    }
  }  
}


Answer 2:

你应该分析的回归pg_last_error知道错误的类型。 所以,我会去某事像这样:

$result = pg_query($connection,$query);

if($result)
{
  //success
}
else
{
  $error = pg_last_error($connection);

  // you need to adapt this regex
  if (preg_match('/duplicate/i', $error))
  {
    echo "this value already exists";
  }
  // you need to adapt this regex
  elseif(preg_match('/different type/i', $error))
  {
    echo "You should enter wrong type for column blabla"
  }
  else
  {
    // different error
  }
}


Answer 3:

可以通过两个主要驱动访问SQLSTATE。

http://uk3.php.net/manual/en/function.pg-result-error-field.php

http://www.php.net/manual/en/pdo.errorcode.php



文章来源: catching errors from Postgresql to PHP