我需要生成一个字母数字字符串并与数据库值进行比较,但如果该值存在于数据库中,那么我们应该生成一个不同的数字字符串,并再次将其与数据库值进行比较....
<?php
$character_array = array_merge(range('a', 'z'), range(0, 9));
$Emp_Id = "";
for($i = 0; $i < 6; $i++) {
$Emp_Id .= $character_array[rand(0, (count($character_array) - 1))];} ?>
通过创建字母数字代码工作正常,但正如我上面提到的,我需要将它与数据库值进行比较。
$chkEmp_Id=mysql_fetch_array(mysql_query("SELECT Emp_Id FROM talent_users WHERE Emp_Id='{$Emp_Id}' "));
在与数据库值进行比较后,如果值存在则应该生成不同的“Emp_Id”,每次生成的员工ID都应该与数据库值进行比较...希望你们得到它na?请帮我解决这个问题...
答案 0 :(得分:0)
$pool = array_merge (range ('a', 'z'), range(0, 9));
do
{
$hash = "";
for ($i = 0; $i < $lengthOfHash; ++$i)
{
$hash .= $pool[array_rand ($pool)];
}
while ( mysql_result (mysql_query ('SELECT COUNT(1) FROM talent_users WHERE Emp_Id = ' . $hash), 0) > 0);
但是当桌面尺寸增大时,这是一个很大的瓶颈。由于哈希是字母数字,为什么哈希不能以userId?
开头//hash = <a number> + <a letter> + <alpha-numeric chars>
$hash = $userId . generateHash();
只需确保generateHash()函数不以数字开头,如评论中所述。
那就像是:
$hash = $userId;
$letters = range ('a', 'z');
$pool = array_merge ($letters, range (0, 9));
for ($i = 0; $i < $lengthOfHash; ++$i)
{
$chooseFrom = $pool;
if ( ! $i )
$chooseFrom = $letters;
$hash .= $chooseFrom[array_rand($chooseFrom)];
}