繁体   English   中英

用php循环for mysql数据库?

[英]While loop for mysql database with php?

我正在开发一个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循环和所有种类,所以这个地方是我最后的选择。

谢谢

你最好使用它: 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

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

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

这个功能不能做你想要的(没有验证): http//www.php.net/manual/en/function.uniqid.php

随机字符串生成...字母,数字,有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);

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

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

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

对于初学者,我总是喜欢在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM