Possible Duplicate:
Algorithm for generating a random number
Hi i need to assign a randomly generated number to some entries into the database and it must be unique. I use:
$random_number = mt_rand[];
mysqli_query[$db_connection, "INSERT INTO my_table [rand_num, blabla] VALUES ['$random_number', '$blabla']"];
But ofc there could always be a slightly low chance that 2 random numbers will be the same. Then i could do something like:
function random_check[$random_number] {
require_once['db_access.php'];
$random_check = mysqli_query[$db_connection, "SELECT rand_num FROM my_table"];
mysqli_close[$db_connection];
$result = 1;
while[$row = mysqli_fetch_array[$random_check]]{
if [$row['rand_num'] == $random_number] {
$result=0
}
}
return $result;
};
$random_number = mt_rand[];
$random_check = random_check[$random_number];
if [$random_check == 0] {
$random_number = mt_rand[];
}
But this would only check the number once and there will still be a chance that the new generated number already exists into the db.
Any suggestions? Thanks
asked Jan 12, 2012 at 11:41
3
Here is a method which you can use:
muya.dev
9061 gold badge13 silver badges33 bronze badges
answered Jan 12, 2012 at 12:52
Vijeenrosh P.WVijeenrosh P.W
3591 gold badge3 silver badges7 bronze badges
Doing a SELECT rand_num FROM my_table
and checking the resulting values is very, very inefficient. Use a WHERE
clause:
do {
$random_number = mt_rand[];
$query_object = mysqli_query[$db_connection, "SELECT 1 FROM my_table WHERE rand_num = $random_number"];
$query_record = mysqli_fetch_array[$query_object];
if[! $query_record] {
break;
}
} while[1];
It is possible to write this code in lesser lines.
answered Jan 12, 2012 at 12:12
Salman ASalman A
252k80 gold badges423 silver badges513 bronze badges
function random_check[$random_number] {
require_once['db_access.php'];
$random_check = mysqli_query[$db_connection, "SELECT rand_num FROM my_table"];
mysqli_close[$db_connection];
while[$row = mysqli_fetch_array[$random_check]]{
if [$row['rand_num'] == $random_number] {
return false;
}
}
return true;
};
while[!random_check[mt_rand[]]{
$myNumbber = random_check[mt_rand[];
}
--> Now u got unique number in "myNumber"
answered Jan 12, 2012 at 11:45
2
md5[ strtotime["now"].$_SERVER['REMOTE_ADDR'] ];
strtotime["now"] would give you a unique number, but ifyou are using this script to process forms/uploads etc from multiple users, the ip address will just make certain of that [on the off chance that at the exact same second two entries are made... can that even happen?? hmm...]
md5[] cos i felt like it :D
answered Jan 12, 2012 at
11:50
UmutUmut
666 bronze badges
4