2012-02-21 33 views

Respuesta

9

No, no es posible que PHP genere exactamente el mismo UUID() como MySQL porque es un número (completamente) aleatorio.

Parece que su problema es que le gusta usar UUID() en MySQL, pero no desea ejecutar una consulta adicional para averiguar cuál es el nuevo UUID.

¿Por qué no tener PHP crear el UUID para ser utilizado como la clave principal en su consulta INSERT ?? This comment on php.net debería mostrarle cómo hacer esto.

Uso de las funciones de la muestra:

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

Editar: Hay varios métodos en esa página que generan diferentes tipos de UUID s. v4 es pseudoaleatorio, pero puede usar una versión diferente o crear su propio generador UUID.

+0

Hmm, usando este método, tendría que comprobar si es un uuid único en MySQL, y si es único en todos los servidores. Parece que se requiere una verificación adicional por única o extracción de datos en cada sentido. – ina

+1

Si usa UUID generados aleatoriamente, no tendrá este problema. Estadísticamente, si generó ** 1 mil millones ** de UUID ** por segundo durante 100 años **, solo hay un 50% de probabilidad de que ** solo uno ** de ellos colisione. (Fuente: http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates) Aunque es probable que nunca vea una colisión, sería inteligente convertir el UUID en una clave principal en MySQL y sincronizar los servidores regularmente. –

0

Intenté el primer paso: $ uuid = UUID :: v4(); pero colgó mi servidor, así que se me ocurrió otra idea que intenté de la siguiente manera:

obtener datos de la consulta $ sql1 = SELECCIONAR UUID() AS uuid; a continuación, almacenar en la variable $ uuid

y luego a usar más adelante

$ sql = "INSERT INTO mitabla (UUID, foo) VALUES ('{$ uuid}', 'valor');"; echo "El UUID es:". $ uuid;