php - 捕获从 Postgresql 到 PHP 的错误

标签 php sql postgresql error-handling

我想使用 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

最佳答案

可以检索到所需的标准 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
      }
    }
  }  
}

此外,如果传递给 pg_query 的参数可能包含多个 SQL 语句(以分号分隔),则应扩展上述示例以在循环中检索所有结果,正如@user1760150 在评论中提到的。与仅返回最后一个结果的 pg_query 相比,循环中的 pg_get_result 可以访问组合查询的每个语句的结果。

关于php - 捕获从 Postgresql 到 PHP 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349230/

相关文章:

c# - 使用 ExecuteNonQuery() 时无法检测到 SQL 错误

postgresql - 无法从 azure 资源连接到 postgres 服务器的 Azure 数据库

python - 如何获得 geodjango 的 k 个最近邻居?

php - 使用filesize读取远程文件大小

sql - 递归连接

php - 如何使用 SESSION 数据来选择 1 个数据库条目,然后使用 PHP 和 MySQL 中的表单数据插入到另一个表中?

mysql - 如何从数据库mysql中选择特定列中具有相同且最新值的所有行

linux - 在bash中为postgresql生成随 secret 码

javascript - 在 PHP 中读取 KML 文件,将其强制写入一行,然后使用 Google map 的 parseKMLString 对其进行解析

php - Laravel 打印日志