質問

こんにちは私は、プロセスとIDとUID、UID、UID、私たちがランダムに生成していますが、私は少し停泊しています、私は常にフィールドが存在していないUIDを生成する必要があります。実際のIDを公開しないようにフロントエンドで使用される固有のフィールド。

RECAPには、現在DBに存在しない一意のIDを生成しようとしています。働いていない部分は、DBのクロスチェックですので、既に存在する数字を表示することがあります。それは事前に感謝してはいけないにもかかわらず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;

    }

}

}
.

役に立ちましたか?

解決 6

コード生成が問題ではなかったみんなに述べたように、問題がすでに何があったかを考え出した!問題は、クロスチェックが正しく機能していないということでした。だから私がやったすべてのループを削除しました

while($i < $characters) 
{ 

    $code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
    $i++;

}
.

これは私のユニークなIDが間違って終わった原因となっていました。

他のヒント

href="http://dev.mysql.com/doc/refman/5.0/en/miscellowe-functions.html#function_uuid" rel="nofollow">> http://dev.mysql.com/DOC / REFMAN / 5.0 / en / miscellane-functions.html#function_uuid

あなたが時間を使うことができるUNIC UIDを生成するために、私はそれがレコードが同じ2つのランダムなデータで追加されることが非常に小さいカンデだだと思います。

そのようなものを返すいくつかの関数を書く

function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}
.

PHP uniqid()

という機能があります

href="http://php.net/manual/en/function.uniqid.php" real="nofollow noreferrer"> http://php.net/manual/en/function.uniqid.php.

他の人のようにIDの生成について話すことができましたが、これはあなたの質問ではありません。 あなたのクエリは大丈夫です。0行を返すが、データベース内のコードを見つけるように思われるが、ほとんど同じように見える可能性が高いが、実際にはそうではない。それは空白によって埋められることができます。

これを解決する1つの方法は、ユーザーデータベースの最後の行を選択し、IDフィールドをチェックするためのスクリプトを持っている(子孫モードでIDの選択を実行することでこれを達成できます)次に、その情報を使用できます。そのIDより大きい数をランダム化するための。

編集

$result = $db->query('
SELECT uniqueID
FROM '.$table.'
');

$already_in_database = array();
while ($row = mysql_fetch_array($result)){
    $already_in_database[] = $row['UID'];    
}

$new = rand(0,$some_max_value);
while(in_array($new,$already_in_database)){
    $new = rand(0,$some_max_value);
}
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top