2012-02-21 23 views

Trả lời

9

Không, không thể có PHP tạo chính xác UUID() làm MySQL vì đó là số ngẫu nhiên (hoàn toàn).

Có vẻ như vấn đề của bạn là bạn thích sử dụng UUID() trong MySQL nhưng không muốn thực hiện truy vấn bổ sung để tìm ra những gì mới UUID là.

Vậy tại sao PHP không tạo UUID để được sử dụng làm khóa chính trong truy vấn INSERT ?? This comment on php.net sẽ cho bạn biết cách thực hiện điều này.

Sử dụng những chức năng mẫu:

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

Sửa: Có nhiều phương pháp trên trang đó mà tạo ra các loại khác nhau của UUID s. v4 là giả ngẫu nhiên, nhưng bạn có thể sử dụng một phiên bản khác hoặc tạo máy phát điện UUID của riêng bạn.

+0

Hmm, sử dụng phương pháp này, tôi phải kiểm tra xem đó có phải là uuid duy nhất trong MySQL hay không và nếu nó là duy nhất trên các máy chủ. Có vẻ như cần thêm một lần kiểm tra độc đáo hoặc kéo dữ liệu theo từng cách? – ina

+1

Nếu bạn sử dụng UUID được tạo ngẫu nhiên, bạn sẽ không gặp phải vấn đề này. Theo thống kê, nếu bạn tạo ** 1 tỷ ** UUID ** mỗi giây trong 100 năm **, thì chỉ có 50% cơ hội ** chỉ một ** trong số đó sẽ va chạm. (Nguồn: http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates) Mặc dù bạn có thể sẽ không bao giờ nhìn thấy một vụ va chạm, nó vẫn sẽ là thông minh để làm cho UUID là khóa chính trong MySQL và đồng bộ hóa các máy chủ thường xuyên. –

0

Tôi đã thử bước đầu tiên: $ uuid = UUID :: v4(); nhưng nó treo máy chủ của tôi, vì vậy một ý tưởng khác đến với cái mà tôi đã thử như sau:

tìm nạp dữ liệu từ truy vấn $ sql1 = SELECT UUID() AS uuid; sau đó lưu trữ trong biến $ uuid

và sau đó sử dụng dưới đây

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

Các vấn đề liên quan