用php循环for mysql数据库?

时间:2011-03-31 23:59:37

标签: php mysql

我正在开发一个mysql数据库。

我“需要”每个用户的唯一ID,但它不能自动递增!至关重要的是它不是自动增量。

所以我想在用户注册我的网站时,在我的mysql表中插入一个类似mt_rand(5000,1000000)的随机数。这是我被困的地方?!

id是我的mysql表上特定于每个用户的唯一键,因为我无法100%保证为用户id插入mt_rand(5000,1000000)不会与其他用户的id语言发生冲突。

有没有办法我可以使用mt_rand(5000,1000000)并扫描mysql数据库,如果它返回true它是唯一的,那么在返回false时将其插入为用户的新ID(某人已经有id)生成一个新的id,直到它变为唯一,然后将其插入到mysql数据库中。

我知道这是可能的,我已经多次看过了,我尝试过while循环和所有种类,所以这个地方是我最后的选择。

由于

6 个答案:

答案 0 :(得分:4)

最好使用此功能:http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_uuid

或使用此:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

但如果你真的想做你所说的话,你可以这样做:

$x;
do {
 $x = random_number();
 "SELECT count(*) FROM table WHERE id = $x"
} while (count != 0);
// $x is now a value that's not in the db

答案 1 :(得分:0)

你可以使用guid。当你不能使用自动编号时,这就是我所看到的。

http://php.net/manual/en/function.com-create-guid.php

答案 2 :(得分:0)

此功能是否符合您的要求(未经验证):http://www.php.net/manual/en/function.uniqid.php

答案 3 :(得分:0)

随机字符串生成...字母,数字,有8个字符的218 340 105 584 896组合。

function randr($j = 8){
$string = "";
    for($i=0;$i < $j;$i++){
        srand((double)microtime()*1234567);
        $x = mt_rand(0,2);
        switch($x){
            case 0:$string.= chr(mt_rand(97,122));break;
            case 1:$string.= chr(mt_rand(65,90));break;
            case 2:$string.= chr(mt_rand(48,57));break;
        }
    }
return $string; 
}

...循环

do{
    $id = randr();
    $sql = mysql_query("SELECT COUNT(0) FROM table WHERE id = '$id'");
    $sql = mysql_fetch_array($sql);
    $count = $sql[0];
}while($count != 0);

答案 4 :(得分:0)

我认为你需要从不同的方向来解决这个问题,特别是为什么不需要一系列递增数字。

如果它需要是一个“不透明”的标识符,你可以做一些事情,比如从一个简单的递增数字开始,然后在它周围添加一些东西,使它看起来不是,例如最后三个随机数。您可以更进一步,并在前面放置一些生成的字母(随机或基于其他算法,例如他们首次注册的月份,或者他们点击的服务器),然后执行一个简单的校验算法来制作另一个信的结尾。现在有人不能轻易猜出一个ID,你有办法在它到达数据库之前拒绝一种ID。您还需要在ID的某处存储附加数据。

如果它需要是一个随机且唯一的数字,那么在告诉新用户之前,您需要使用生成的ID检查数据库。在这里你会遇到规模问题,因为数字空间太小,你会在检查运气之前得到太多的碰撞。如果可能的话,那么您需要将ID生成分为两部分:第一部分将用于查找具有该前缀的所有ID,然后您可以生成一个在该集合中不存在的新ID来自DB。

答案 5 :(得分:0)

对于初学者,我总是喜欢在php中进行所有随机化。

function gencode(){
$tempid=mt_rand(5000, 1000000);
$check=mysql_fetch_assoc(mysql_query("SELECT FROM users WHERE id =$tempid",$link));
if($check)gencode();
$reg=mysql_query("INSERT INTO users id VALUES ('$tempid')",$link);
//of course u can check for if $reg then insert successfull