goto语句主要(如果有的话)用于错误处理:在一长串语句中,每个语句都能够触发错误,在函数底部附近进行跳转(goto)以跳过所有剩余语句,并在函数结束时运行一个常见的错误处理器。
但是现在,即使是 PHP 也有异常处理,因此使用goto就更不合理了。
解决上述问题
在您的情况下,您可以实现一个简单的算法来执行等效功能
do {
$rnumber = rand(1, 10);
$queryresult = $mysqli->query("SELECT uniquerandomcolumn FROM tbldata WHERE uniquerandomcolumn =" . $rnumber);
} while ($queryresult->num_rows > 0);
有陷入无限(或非常长)循环的风险......
改进空间
由于尝试次数有限(1 .. 10),最好
- 不重复尝试从 1 到 10(最大)的所有数字
- 随机(例如 7 2 3 9 ...)
即,最多执行 10 次尝试,如果该行不存在或所有 10 次尝试都已完成,则退出。要从 1 到 10 随机尝试,请使用shuffle函数随机打乱 1 到 10 个元素的数组。
$tries = array();
for ($i=1 ; $i<=10 ; $i++) $tries[] = $i; // create an array (1,2,3,4,5...)
shuffle ($tries); // shuffle the array, eg now $tries is (8,2,9,1,7...)
$index = 0; // start with first element of $tries
do {
$rnumber = $tries[$index++];
$queryresult = $mysqli->query("SELECT uniquerandomcolumn FROM tbldata WHERE uniquerandomcolumn =" . $rnumber);
} while ($queryresult->num_rows > 0 && $tries < 10);
这样你就可以随机尝试所有 10 个可能的值,而不是更多。
一段时间后添加
if ($queryresult->num_rows < 1) {
// found a non existing number: $tries[$index-1]
}
else {
// all 10 numbers exist in the DB...
}
处理这两种情况。