脚本宝典收集整理的这篇文章主要介绍了php – Rethrowing部分捕获异常?,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
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中执行此操作,或者是我在数据库中使用存储过程的唯一替代方法,该存储过程在失败时返回错误代码而不是异常.
首先进行搜索在PHP中会慢得多(两个或多个查询),而在sql中的正常情况(一个额外查询)稍慢一些,但如果有很多冲突,那么首先进行搜索会更快而不是插入失败.
DECLARE CONTINUE HANDLER FOR 1062 -- duplicate key SET @duPE = 1; SET @dupe = 0; SET @attemptsLeft = 5; REPEAT SET @user_code = randomString(4); INSERT INTO mytable(expires,user_code,users_id)VALUES(p_expires,@user_code,p_users_id); SET @attemptsLeft = @attemptsLeft - 1; -- if there's a dupe we get the continue handler above UNTIL @dupe = 0 OR @attemptsLeft <= 0 END REPEAT;
以上是脚本宝典为你收集整理的php – Rethrowing部分捕获异常?全部内容,希望文章能够帮你解决php – Rethrowing部分捕获异常?所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。