문제

안녕하세요, 프로세스와 ID와 UID가 무작위로 생성하지만 UID는 필드와 같은 DB에 항상 존재하지 않는 UID를 항상 생성해야합니다.실제 ID를 노출하지 않도록 프런트 엔드에 사용되는 독특한 필드.

그래서 RECAP에 현재 작동하지 않은 부분에 현재 존재하지 않는 고유 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가 잘못되었으므로

다른 팁

유닉스 UID를 생성하려면 시간을 사용할 수 있습니다. 레코드가 두 개의 무작위 데이터로 동일한 두 번째로 추가되는 매우 작은 챈스라고 생각합니다.

을 좋아하는 기능을 작성하십시오.
function generate_uid(){
 return md5(mktime()."-".rand()."-".rand());
}
.

PHP에서 uniqid()

이라는 함수가 있습니다.

http://php.net/manual/en/function.uniqid.php.

다른 사람들과 마찬가지로 ID를 생성하는 것에 대해 이야기 할 수 있었지만 이것은 귀하의 질문이 아닙니다. 쿼리가 괜찮은 것 같습니다.0 행을 반환하지만 데이터베이스에서 코드를 찾은 것처럼 보입니다. 즉, 동일 할 가능성이 높지만 실제로는 아닙니다.그것은 공백으로 패딩 될 수 있습니다.

해결하는 한 가지 방법은 사용자 데이터베이스의 마지막 행을 선택하고 스크립트를 확인하여 ID 필드를 확인하는 것입니다 (Descendent 모드에서 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