이 당신에게 임의의 8 문자열 줄 것이다 :
substr(str_pad(dechex(mt_rand()), 8, '0', STR_PAD_LEFT), -8);
는 여기에서 찾을 : 사용자 이름 필드에 고유 한 경우
또는 http://www.richardlord.net/blog/php-password-security 당신은 또한 사용할 수 있습니다
substr(md5('username value'), 0, 8);
는 비록 특히 md5의 경우는 거의 없습니다. 어느 경우에도 고유 한 문자열이 보장되지 않으므로 다음과 같이 처리 할 것입니다.
// Handle user registration or whatever...
function generatePID($sUsername) {
return substr(md5($sUsername), 0, 8);
}
$bUnique = false;
$iAttempts = 0;
while (!$bUnique && $iAttempts < 10) {
$aCheck = $oDB->findByPID(generatePID("username value")); // Query the database for a PID matching whats generated
if (!$aCheck) { // If nothing is found, exit the loop
$bUnique = true;
} else {
$iAttempts++;
}
}
// Save PID and such...
... 아마 유일한 '확인'쿼리를 내고, 어쩌면 고유 한 경우 2 개가 생겨 고유 한 문자열을 보장합니다.
PHP를 생성하고 데이터베이스가 존재하는지 확인하기 위해 루프를 생성하는 최선의 방법. 일부 magin mysql 문에서이를 수행 할 수있는 방법을 찾을 수 있다고 생각했습니다. – trrrrrrm
아니요. 고유하지 않은 값을 삽입하려고 시도 할 때 실패하는 PID 필드에 고유 키가 있어야합니다.이 값은 무언가가 성공적으로 삽입 될 때까지 루프를 계속 실행하려고 시도하는 또 다른 옵션을 제공합니다. 나는 당신이 이미지 갤러리를하고있는 것을보고 우리는 실제로 항상 현재 시간 + 파일 이름의 md5를 저장하고 그 파일 확장자를 '파일'필드에 나타냅니다.이 필드는 항상 고유 한 문자열을 얻습니다. 약 8 년 만에 문제가 발생하지 않았습니다. 필드는 32 문자 + 확장 길이를 허용해야합니다 - 우리는 보통 50으로 붙어 있습니다. –