带有while循环的php函数

时间:2010-01-25 20:52:32

标签: php function while-loop

我有一个生成随机组合的函数。

我的功能如下:

  function random_gen($length) {
  $random= "";
  srand((double)microtime()*1000000);
  $char_list = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  $char_list .= "abcdefghijklmnopqrstuvwxyz";
  $char_list .= "1234567890";
  // Add the special characters to $char_list if needed

  for($i = 0; $i < $length; $i++)
  {
    $random .= substr($char_list,(rand()%(strlen($char_list))), 1);
  }
  return $random;
}

$new_url = random_gen(6);

现在我想有一个while循环来检查我的数据库中是否已经存在$ new_url ...

然后插入结果如下:

mysql_query("INSERT INTO lank (url, code) VALUES ('$url', '$new_url')"); 

除了while循环外,我得到了一切。我只是想弄清楚怎么做......

6 个答案:

答案 0 :(得分:5)

  • 在数据库中将代码字段定义为UNIQUE
  • 生成代码并运行INSERT
  • 使用mysql_affected_rows()检查INSERT是否实际发生(即代码已经存在)

为您保存SELECT查询

while ( true ) {
    $new_url = random_gen(6);
    mysql_query("INSERT INTO lank (url, code) VALUES ('$url', '$new_url')");
    if ( mysql_affected_rows() )
        break;
}

答案 1 :(得分:3)

使用此random_generator

function random_gen($length) {
  $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';

  $string = '';
  for ($i = 0; $i < $length; $i++) {
    $string .= $characters[rand(0, strlen($characters) - 1];
  }
  return $string;
}

答案 2 :(得分:1)

您不需要while循环,只需执行查询

mysql_query("SELECT COUNT(*) FROM lank WHERE code = {$new_url}");

答案 3 :(得分:0)

这很直接:

$sql = "SELECT COUNT(*) as num FROM lank WHERE code='{$new_url}'";
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);

while($row['num'] > 0) {
    $new_url = random_gen(6);

    $sql = "SELECT COUNT(*) as num FROM lank WHERE code='{$new_url}'";
    $result = mysql_query($sql);
    $row = mysql_fetch_assoc($result);
}

答案 4 :(得分:0)

这应该可行,不需要重复代码:

while(true) {
    $new_url = random_gen(6);

    $sql = "SELECT COUNT(*) FROM lank WHERE code='{$new_url}'";
    $result = mysql_query($sql);
    $row = mysql_fetch_row($result);
    if (!$row[0])
        break;
}

答案 5 :(得分:0)

请改用uniqid()功能。它将始终生成随机结果。

如果您需要更高的安全性(即:您不需要相邻的值),只需对输出进行哈希:sha1(uniqid())