我用随机数作为用户名,用户名是不能重复的,但是随机数也有可能重复(概率不考虑)
那么,如何让程序运行之后,发现重复了,自动重试一次呢?如果第二次再重复(或失败)的话就
让他停止运行?
function add() { $name = ''; for ($i=0; $i < 10; $i++) { $name .= mt_rand(0,9); } //$sql = "insert into user ('name') values($name)"; $PDO->exet($sql); if(!$res){ //重试??? } }
嗯...用递归
可以吗?
function add($number = 1) { $name = ''; for ($i=0; $i < 10; $i++) { $name .= mt_rand(0,9); } //$sql = "insert into user ('name') values($name)"; $PDO->exet($sql); if(!$res){ // 第一次调用add方法 生成rand 失败则再调用一下自身 // 第二次失败的话 就返回FALSE if($number == 1) $this->add(2); else return FALSE; } }
1、你这个情况,应该在生成随机数以后立即检查此随机会是否可用吗,如果可用才进行数据库插入工作的。
而不是让程序出错了再执行。
2、简单的使用$name .= mt_rand(0,9)来生成随机数,这个出现重复的机率会很高,尤其在你网站有一定访问量的情况下,非常非常不建议你这样子做。
1。把需要重复执行的代码提取出来做一个独立的方法,这样就能重复调用了
2。使用跳转标签
可以使用php的异常来实现,当发生错误时,主动抛出一个异常,利用try...catch
来捕获异常,当捕获后再次重试,如果还是发生异常,可以exit()
或者die()
设置个变量counter计数保存出错次数。 代码块加异常处理try catch. catch里:
if(counter==0) { counter+=1; //可以写个错误信息到日志 } else { //退出程序 }
逻辑问题啊, 先看用户名有没有重复啊, 不用先插入如果插入不进去才重试啊,