gpt4 book ai didi

php - 捕获从 Postgresql 到 PHP 的错误

转载 作者:可可西里 更新时间:2023-11-01 13:36:29 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com