簡體   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