用函数替换goto,为什么这不起作用


Replacing goto with a function, why doesn't this work?

我一直在尝试更改验证脚本的一些代码,使其不包含goto,因为我想在虚拟主机上运行我的脚本,不幸的是,它们中的大多数实际上都没有5.3或更高版本。

该代码旨在使用 rand 生成的值作为唯一的验证号。如果它已经在数据库中找到它,它会根据需要多次将 1 附加到数字上,直到找到可用的数字。很简单。我知道对于MySQL查询来说,这是糟糕的做法,但它实际上只是一个简单的练习脚本。

代码如下:

function gen_val($val)
{
    $query = mysql_query("SELECT val_id FROM users_tmp WHERE val_id=$val");
    $row = mysql_fetch_array($query);
    if ($row[0]==$val) {
        gen_val($val+1);
    } else {
        return $val;
    }
}
$val_x=gen_val(rand());

如果数据库中已存在该值,则返回值"0"。如果已经没有类似的值,函数工作正常,所以我认为函数递归有问题。我认为我真的不知道如何正确使用它,所以请继续教育我。

干杯。

阿瑟

你忘了返回递归的结果。

return gen_val($val+1);
如果我

错了,请纠正我,但您希望为每个用户获取一个唯一的ID。MySQL具有此功能。