2014-06-14 50 views
-1

我寫了一段代碼來創建一個隨機字符串,該字符串對於MySQL表中的每一行都是唯一的。但我不確定它是否可以100%正常工作,並且確保始終獨一無二的public_key(假設所有選項都未完成)。PHP MYSQL中的唯一公共標識符

$id = mysql_insert_id(); 

    $public_key = rand_string(8); 

    function insertPublicKey($key, $post) { 
     mysql_query("UPDATE posts SET public_key = '$key' WHERE id = '$post'"); 
    } 

    function createPublicKey ($key, $post) { 

     $query = mysql_query("SELECT * FROM posts WHERE public_key = '$key'"); 
     if(mysql_num_rows($query) == 0) { 
      insertPublicKey($key, $post); 
     } else { 
      $public_key = rand_string(8); 
      createPublicKey ($public_key, $post); 
     } 

    } 

    createPublicKey ($public_key, $id); 

我想如果一些PHP技術人員可以看看代碼,並確認這總是會創建一個唯一的密鑰。

+0

像每蘭特功能,你永遠無法確定如果考慮到每次 – chresse

+0

返回不同的值,這個「完整」和你希望有人驗證它,你需要在http://codereview.stackexchange.com/上提問;這就是說,你正在使用一個不推薦使用的擴展(見http://www.php.net/manual/en/intro.mysql.php),這對於新代碼來說不是一個好主意。 –

+0

在SQL的public_key列上簡單應用'UNIQUE'約束可能會更簡單 - 這樣,如果插入成功,您知道生成的代碼實際上是唯一的(如果失敗,您可以攔截它並生成另一個代碼) – Psychemaster

回答

0

您可以使用uniqid,以確保你有一個獨特的密鑰:

string uniqid ([ string $prefix = "" [, bool $more_entropy = false ]])