Php 正在检查mySQL数据库中是否存在重复的uid

Php 正在检查mySQL数据库中是否存在重复的uid,php,mysql,Php,Mysql,我试图在我的PHP代码中实现一个检查,检查数据库中是否有重复的uid,如果是,则分配一个新的uid,然后再次检查,但我在确定逻辑方面遇到了困难,这是我迄今为止所做的 function check($uid){ $sql = mysql_query("SELECT * FROM table WHERE uid='$uid'"); $pre = mysql_num_rows($sql); if($pre >= 1){ return false;

我试图在我的PHP代码中实现一个检查,检查数据库中是否有重复的uid,如果是,则分配一个新的uid,然后再次检查,但我在确定逻辑方面遇到了困难,这是我迄今为止所做的

function check($uid){
    $sql = mysql_query("SELECT * FROM table WHERE uid='$uid'");
    $pre = mysql_num_rows($sql);

    if($pre >= 1){
        return false;
    }else{
        return true;
    }
}
然后使用这个函数,我想使用while循环继续循环,直到它的计算结果为
true

$pre_check = check($uid);

while($pre_check == false){
    //having trouble figuring out what should go here
}
所以基本上,一旦我有了一个可用的uid,就把所有的东西都写入数据库,否则就继续生成新的uid并检查它们,直到找到一个还没有使用的uid为止

这可能真的很简单,但出于某种原因,我在这方面遇到了麻烦。 先走一步

$uid = 100;  // pick some other value you want to start with or have stored based on the last successful insert.
while($pre_check == false){
    $pre_check = check(++$uid);
}
当然,这正是“自动递增”主键的用途。您知道mysql中的“自动递增”主键吗

编辑
鉴于您对维护其他人使用随机函数(EWWWW)的代码的评论。。。我会使用我上面建议的方法,将最后插入的id存储在某个地方,以便下次用户再次读取。这将允许您“填空”缺少的UID。例如,如果你有UID 1,2,5,9,40,100。。。您可以从
$uid=1开始到达3后,while循环将返回。现在存储3并创建新记录。下一次,从
$uid=3开始等等。最终你会把所有的数字都填好

同样重要的是要认识到,您需要通过锁定表进行写入来执行插入。您不希望进入两个不同用户获得相同uid的竞争条件,因为他们都在同时搜索可用的uid

当然,这正是“自动递增”主键的用途。您知道mysql中的“自动递增”主键吗

编辑
鉴于您对维护其他人使用随机函数(EWWWW)的代码的评论。。。我会使用我上面建议的方法,将最后插入的id存储在某个地方,以便下次用户再次读取。这将允许您“填空”缺少的UID。例如,如果你有UID 1,2,5,9,40,100。。。您可以从
$uid=1开始到达3后,while循环将返回。现在存储3并创建新记录。下一次,从
$uid=3开始等等。最终你会把所有的数字都填好


同样重要的是要认识到,您需要通过锁定表进行写入来执行插入。您不希望进入两个不同的用户获得相同uid的竞争条件,因为他们都在同时搜索可用的uid。

实际上,最好使用自动增量ID,但如果您没有选择,您可以执行类似这样的递归功能:

function find_uid() {
  $new_uid = rand(1000000000, 9999999999);
  $sql = mysql_query("SELECT COUNT(*) AS 'nb' WHERE uid=".$new_uid.";");
  $row = mysql_fetch_assoc();
  $pre = $row['nb'];
  return ($pre >= 1 ? find_uid() : $new_uid);
}
计数(*)应该更有效,因为计数是由MySQL而不是php进行的


顺便说一句,如果您需要一个新的uid,那么条件不应该是($pre>0)而不是($pre>1)?

实际上最好是使用自动增量ID,但是如果您没有选择,您可以执行类似这样的递归函数:

function find_uid() {
  $new_uid = rand(1000000000, 9999999999);
  $sql = mysql_query("SELECT COUNT(*) AS 'nb' WHERE uid=".$new_uid.";");
  $row = mysql_fetch_assoc();
  $pre = $row['nb'];
  return ($pre >= 1 ? find_uid() : $new_uid);
}
计数(*)应该更有效,因为计数是由MySQL而不是php进行的


顺便说一句,如果你需要一个新的uid,条件不应该是($pre>0)而不是($pre>1)?

我知道他们是的,我正在编辑其他人的代码,他们使用了
$uid=rand(100000000099999999)我知道他们是的,我正在编辑别人的代码,他们使用了
$uid=rand(10000000009999999)