2012-02-21 141 views

回答

9

不,不可能讓PHP生成與MySQL完全相同的UUID(),因爲它是一個(完全)隨機數。

聽起來像你的問題是,你喜歡在MySQL中使用UUID(),但不想執行額外的查詢來找出新的UUID是什麼。

那麼爲什麼不讓PHP創建UUID作爲INSERT查詢中的主鍵? This comment on php.net應該告訴你如何做到這一點。

使用這些樣本功能:

$uuid = UUID::v4(); 
$sql = "INSERT INTO mytable (uuid, foo) VALUES ('{$uuid}', 'bar');"; 
echo "The UUID is: ". $uuid; 

編輯:有頁面上幾種方法能產生不同類型的UUID秒。 v4是僞隨機的,但您可以使用不同的版本或創建自己的UUID生成器。

+0

嗯,使用這種方法,我不得不檢查它是否是MySQL中唯一的uuid,以及它是否是跨服務器唯一的。似乎每種方式都需要額外的檢查獨特或數據拉取? – ina 2012-02-24 03:19:36

+1

如果使用隨機生成的UUID,則不會出現此問題。根據統計,如果您在100年內每秒產生** 10億** UUID ** **,**只有一個**會有50%的機會發生碰撞。 (來源:http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates)儘管你可能永遠不會看到衝突,但將UUID作爲MySQL主鍵並定期同步服務器仍然很明智。 – 2012-02-24 14:32:50

0

我試過第一步:$ uuid = UUID :: v4();但它掛起了我的服務器,所以我想到了另一個想法,我試着如下:

從查詢獲取數據$ sql1 = SELECT UUID()AS uuid; 然後在變量$ UUID存儲

,然後使用下面

$ SQL = 「INSERT INTO MYTABLE(UUID,FOO)VALUES( '{$ UUID}', '酒吧');」; echo「UUID是:」。 $ UUID;