我的代码预计在插入远程数据库时偶尔会出现唯一索引冲突。无法避免违规,因为我需要一个随机生成但人类可读的值。不幸的是,当这种情况发生时,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/