php - 重新抛出部分捕获的异常?

标签 php exception pdo

我的代码预计在插入远程数据库时偶尔会出现唯一索引冲突。无法避免违规,因为我需要一个随机生成但人类可读的值。不幸的是,当这种情况发生时,PDO 只是抛出一个通用的 PDOException,所以我有一个包含这种可憎的循环:

do {
        ...
   } catch (PDOException $e) {
       if ($e->getCode() === '23000') {
          continue; // have another go
      } else {
          throw new Exception("...", 1, $e); // reraise
      }
} while(there was an exception);

我认为错误捕获会比搜索然后插入更好,因为使用四位数代码并且任何时候只有几百个事件代码,几乎不会发生冲突。

所以像 best practices for catching and re-throwing exceptions? 这样的问题和 Rethrow php exception into higher level catch block建议即使在 PHP 中,这也是不好的做法。我都捕获了一个异常我 99% 确定我会重新抛出,并且我正在使用异常进行流量控制。

在 PHP 中是否有更好的方法来执行此操作,或者我唯一的选择是在数据库中使用存储过程,该存储过程在失败时返回错误代码而不是异常。

最佳答案

如果你想重新抛出相同的异常,为什么不使用 just:

throw $e;

关于php - 重新抛出部分捕获的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24442382/

相关文章:

php - 在 where 子句中具有多个条件的 PDO 准备语句

mysql - PDO 代码无法正常工作

需要 PHP 和 MySQL 帮助

php - 连接失败 : php_network_getaddresses: getaddrinfo failed: System error

c# - ExecuteScalar "Specified cast is not valid"异常

java - GZIP解压代码抛出异常

exception - Kotlin - 异常后继续协程

php - Laravel 数据库外观内存使用情况

php - mysql-具有不同组的消息传递应用程序的数据库模式

php - 获取 SugarCRM Beans 的集合