2013-09-16 36 views
2

我正在創建一個網站,將更新貢獻者的帖子,評論等,我想知道創建ID的最好方法,以防止在任何表中重複。我使用的是時間戳的時刻用一個唯一的編號沿末,如:MySQL數據庫ID的

$time = time(); 
$id= time().'-'.mt_rand(1000, 9999); 

到輸出:

1378291391-1167,1378294733-8990,1378294934-3336等,等

任何人都可以看到這種類型的ID創建系統的問題?

+0

是,隨機數不能保證唯一 –

+1

這聽起來像一個XY問題。 http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem - 請解釋爲什麼你需要在多個表上獨一無二的ID,我們會告訴你爲什麼這是一個壞主意。 – Halcyon

+0

爲什麼該ID必須是全球唯一的? 'foo.id','bar.id'等...是全局唯一的,即使id部分可以複製到多個表中。 –

回答

1

我會用

  • microtime增加獨特性(),而不是time()

  • 如果字符串允許的,附加與microtime中功能uniqid()

  • 並使用mt_rand具有較大的值(mt_rand(0, 10000000)

http://php.net/manual/en/function.uniqid.php

http://fi2.php.net/microtime

+0

這是'uniqid'而不是'uniqueid',我相信這就是你的意思。 http://php.net/manual/en/function.uniqid.php - 我注意到在同一頁面上。我相信那是在PHP.net上發佈它的人的錯誤。 –

+0

是的你是對的 – iiro