yo siempre utilice esa función para obtener el último id y nunca tuve problemas,
la razón de esta confiabilidad consiste en que cuando ejecutas la transacción el id generado se mantiene disponible solo para la conexión que hiciste, osea el mysql_connect() que estas usando, si hay muchos insert al mismo tiempo de diferentes clientes a cada sesión le devolvera solo el id que se generó cada quién, por la simple y sencilla razón de que cada ejecución lanzo su propio mysql_connect()
espero haber sido sido claro.
por cierto ahora que utilizo los stored procedures uso la función de mysql que se llama LAST_INSERT_ID()
saludos
----- Mensaje original -----
De: "Federica Pavese" <
[email protected]>
Para: "Lista PHP en español" <
[email protected]>
Enviados: Jueves, 23 de Junio 2011 16:28:49 GMT -06:00 Guadalajara / Ciudad de México / Monterrey
Asunto: Re: [PHP-ES] alguien ha usado ... o se fía de ... ( jueves de debate ;)
Hola a todos !
Ricardo: para qué necesitás el id del registro?
De esto también depende la respuesta que podamos darte.
Porque por ejemplo: si lo necesitás para después introducirlo en otras
tablas y relacionar todas las tablas por el id... entonces podés usar
transacciones (begin-commit-rollback).
Hasta que no se ejecuta el commit (o el rollback), no entra otra transacción
y el valor del id se mantiene.
Federica
----- Original Message -----
From: "Juan Manuel Acuña Barrera" <
[email protected]>
To: "Lista PHP en español" <
[email protected]>
Cc: "Ricardo Martinez" <
[email protected]>
Sent: Thursday, June 23, 2011 6:08 PM
Subject: Re: [PHP-ES] alguien ha usado ... o se fía de ... ( jueves de
debate ;)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
El 23/06/2011, a las 13:28, Ricardo Martinez escribió:
Hola lista!!!
me gustaría saber, que pensáis de averiguar el id de un registro
utilizando
instrucciones tipo: *
mysql_insert_id($link); * ( devuelve el último id introducido )
Por ejemplo realizamos un insert
$sql = "insert into ... "
if(mysql_query($sql,$link) )
{
$id = mysql_insert_id($link)
}
en una aplicación multi-usuario, sería fiable ¿? , alguién tiene
experiencia
con este tipo de casos ¿?
claro está que he intentado simplificar mucho el ejemplo anterior,
actualmente, uso PDO.
Pido vuestra opinión, porque pese a llevar muchos años programando en PHP,
casi nunca he implementado estructuras de ese tipo, la razón desconfianza.
Un saludo!!!
--
Ricardo
_______________________________________________
IT Architect
website:
http://www.pulsarinara.comHola, lo que preguntas se llama "condición de carrera", por lo de tener
muchos usuarios simultáneamente. En mi humilde experiencia, esto se puede
dar por dos situaciones: la primera, que tengas _realmente_ muchos usuarios
y/o consultas simultáneas; y la segunda, cuando por alguna razón hay
problemas de conexión entre tu aplicación y el mysql y entren "de golpe"
muchas consultas/inserts.
Asumiendo que el "id" del que estás hablando es un auto-increment, en mi
experiencia la solución que yo he aplicado y me ha funcionado bastante bien
es:
1.- Crear un número pseudo-aleatorio grande (8 a 10 cifras).
2.- Incluirlo en el insert (se debe tener un campo preparado para esto
(entero, not-null):
$sql = "insert into tabla values
('$valor1','$valor2',......,'$valorN','$numeroAleatorio') ";
3.- Recuperar el id, usando una consulta con los valores insertados:
$sql = "select id from tabla where (valor1='$valor1' AND valor2='$valor2'
AND ..... valorN='$valorN' AND numeroAleatorio='$numeroAleatorio') order by
id desc limit 1";
A reserva de lo que opinen otros compañeros de la lista, esta solución,
aunque no es la más eficiente, si es una que me ha dado muy buenos
resultados en materia de fiabilidad, al grado que te puedo decir que de
muchos millones de inserts, nunca he tenido un problema en este sentido.
Quedo a la espera de sus comentarios.
Juan Manuel Acuña
PD me encanta la idea de "jueves de debate" :)
--
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit:
http://www.php.net/unsub.php__________ Información de ESET NOD32 Antivirus, versión de la base de firmas
de virus 6232 (20110623) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 6232 (20110623) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com--
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit:
http://www.php.net/unsub.php