如果已存在于数据库中,如何生成新的随机值?

时间:2014-02-14 07:36:09

标签: php jquery

如果数据库中已存在该值,如何在文本框中自动生成新的随机值?

这是我的代码示例。

<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);

$mysqli1 = new mysqli("localhost", "root", "", "k");

$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
echo "User id exists already.";
}
echo '<input name="id" value="'.$randomString.'">';
?>

感谢先进!

5 个答案:

答案 0 :(得分:0)

使用此strtotime('now')

  

来自W3schools :strtotime将英语文本日期时间解析为   Unix时间戳(自1970年1月1日00:00:00以来的秒数)   GMT)。

这将永远是唯一的。所以不需要任何检查。

以防两个用户同时同时进行

附加一个随机字符串......例如:

$unique_id=strtotime('now')."".substr(str_shuffle("abcdefghijklmnopqrstuvwxyz"), 0, 5);

答案 1 :(得分:0)

显然,您需要一个独特的价值

uniqid()函数根据microtime(当前时间,以微秒为单位)生成唯一ID。

echo uniqid();

编辑:OP只需要6个字符。所以尝试像

这样的东西
$id = uniqid();
$id = substr($id,rand(0,strlen($id) - 6),6);

答案 2 :(得分:0)

这会更好,你可以试试这个

$randomString = md5(uniqid(rand(), true));

答案 3 :(得分:0)

可以用这个(Linux示例)生成一个稍微有点随机的字符串:

substr(sha1(openssl_random_pseudo_bytes(3)), 0, 6);

尽管如此,由于域值有限,可能会出现重复;以下算法通常有效:

  1. 生成标识符
  2. 插入带有生成标识符的记录;使用"INSERT IGNORE"
  3. 如果没有受影响的行,请转到#1

答案 4 :(得分:0)

再次生成它。

<?php
$length = 1;
$randomString = substr(str_shuffle("123456789"), 0, $length);

$mysqli1 = new mysqli("localhost", "root", "", "k");

$sql = $mysqli1->query("SELECT catid FROM subcat WHERE catid = '$randomString'");
if(($sql->num_rows) > 0){
    $randomString = substr(str_shuffle("123456789"), 0, $length);
}
echo '<input name="id" value="'.$randomString.'">';
?>

或者在生成的字符串末尾添加一个时间,使其更随机。

这样的东西,你应该有更大的长度值。因为长度为1,你不能有更多的随机数。

substr(str_shuffle("123456789"), 0, $length).time();

但是除非你使用md5或其他东西做出更好的算法,否则仍然有可能重复。