【发布时间】:2012-03-28 21:59:38
【问题描述】:
您好,我正在创建一个处理 ID 和 UID 的系统,我们随机生成的 UID 但我有点卡住了,我需要始终生成一个当前不存在于数据库中的 UID,因为该字段是前端使用的唯一字段,以免暴露真实ID。
所以回顾一下,我正在尝试生成数据库中当前不存在的唯一 id,我没有工作的部分是数据库中的交叉检查,因此它有时会给出一个已经存在于数据库中的数字db 即使它不应该提前感谢。
这是我目前的代码:
function uniqueID($table)
{
$db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$possible = '1234567890';
$code = '';
$characters = mt_rand(7,14);
$i = 0;
while($i < $characters)
{
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
$i++;
}
$result = $db->query('
SELECT uniqueID
FROM '.$table.'
WHERE uniqueID = "'.$code.'"
LIMIT 1
');
$totalRows = $result->num_rows;
if(!$result)
{
return $db->error;
}
else
{
if($totalRows > 0)
{
return uniqueID($table);
}
else
{
return $code;
}
}
}
【问题讨论】:
-
请在 $totalRows 中做一个 var_dump
-
你有什么方法可以发现数据库中已经存在代码?
-
@Leif 上面代码中的方法可以在Gabriel的下半部分看到,$totalRows是一个int,不管我们查询的总行数是多少。
-
@AndréFigueira 在
if($totalRows > 0)和echo('RETURN');内添加echo('RERUN');if($totalRows > 0)的 else。验证是否有两个回声以及脚本输入的位置。