fatfree SQL错误处理

时间:2015-05-28 22:28:29

标签: php exception-handling fat-free-framework

如果由于某种原因,使用映射器创建条目时出错,我会收到错误。

我想做一个自定义通知,然后优雅地失败......

try {
    $request->save();
} catch (Exception $e) {
    $this->utils->errorNotify($f3,'could not create a request entry',http_build_query($_POST));
    return null;
}

这可能与F3有关吗?

1 个答案:

答案 0 :(得分:7)

\ DB \ SQL是PDO的子类,因此它可以抛出可捕获的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映射器,因为它们依赖于相同的DB \ SQL类:

$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
}