簡體   English   中英

帶while循環的php函數

[英]php function with a 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循環外,我所有工作都可以進行。 我只是想不通怎么做...

  • 在數據庫中將代碼字段定義為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;
}

使用這個random_generator

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

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

您不需要while循環,只需執行查詢

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

這很簡單:

$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);
}

這應該有效,無需重復代碼:

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;
}

請改用uniqid()函數。 它將始終生成隨機結果。

如果需要更高的安全性(即:不需要相鄰的值),只需對輸出進行哈希處理: sha1(uniqid())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM