我想捕捉和显示错误(的方式,我选择)使用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_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
}
}
你可以通过两个主要驱动访问SQLSTATE。
http://uk3.php.net/manual/en/function.pg-result-error-field.php
http://www.php.net/manual/en/pdo.errorcode.php