fatfree SQL 错误处理
fatfree SQL error handling
如果出于某种原因,使用映射器创建条目时出现错误,我会收到错误消息。
我想做一个自定义通知并像这样优雅地失败...
try {
$request->save();
} catch (Exception $e) {
$this->utils->errorNotify($f3,'could not create a request entry',http_build_query($_POST));
return null;
}
F3 可以吗?
\DB\SQL 是 PDO 的子class,因此它可以抛出可捕获的 PDO 异常。由于这些默认情况下处于禁用状态,因此您需要先启用它们。这可以通过两种不同的方式完成:
在实例化时,对于所有事务:
$db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));
稍后在代码中,基于每笔交易:
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
启用 PDO 异常后,将它们作为其他异常捕获:
try {
$db->exec('INSERT INTO mytable(id) VALUES(?)','duplicate_id');
} catch(\PDOException $e) {
$err=$e->errorInfo;
//$err[0] contains the error code (23000)
//$err[2] contains the driver specific error message (PRIMARY KEY must be unique)
}
这也适用于数据库映射器,因为它们依赖于相同的 DB\SQL class:
$db=new \DB\SQL($dsn,$user,$pwd,array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));
$mytable=new \DB\SQL\Mapper($db,'mytable');
try {
$mytable->id='duplicate_id';
$mytable->save();//this will throw an exception
} catch(\PDOException $e) {
$err=$e->errorInfo;
echo $err[2];//PRIMARY KEY must be unique
}
如果出于某种原因,使用映射器创建条目时出现错误,我会收到错误消息。
我想做一个自定义通知并像这样优雅地失败...
try {
$request->save();
} catch (Exception $e) {
$this->utils->errorNotify($f3,'could not create a request entry',http_build_query($_POST));
return null;
}
F3 可以吗?
\DB\SQL 是 PDO 的子class,因此它可以抛出可捕获的 PDO 异常。由于这些默认情况下处于禁用状态,因此您需要先启用它们。这可以通过两种不同的方式完成:
在实例化时,对于所有事务:
$db = new \DB\SQL($dsn, $user, $pwd, array( \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION ));
稍后在代码中,基于每笔交易:
$db->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
启用 PDO 异常后,将它们作为其他异常捕获:
try {
$db->exec('INSERT INTO mytable(id) VALUES(?)','duplicate_id');
} catch(\PDOException $e) {
$err=$e->errorInfo;
//$err[0] contains the error code (23000)
//$err[2] contains the driver specific error message (PRIMARY KEY must be unique)
}
这也适用于数据库映射器,因为它们依赖于相同的 DB\SQL class:
$db=new \DB\SQL($dsn,$user,$pwd,array(\PDO::ATTR_ERRMODE=>\PDO::ERRMODE_EXCEPTION));
$mytable=new \DB\SQL\Mapper($db,'mytable');
try {
$mytable->id='duplicate_id';
$mytable->save();//this will throw an exception
} catch(\PDOException $e) {
$err=$e->errorInfo;
echo $err[2];//PRIMARY KEY must be unique
}