Re: [PHP-ES] alguien ha usado ... o se fía de ... ( jueves de debate ;)

[email protected] (Ivan Rico)
Newsgroups php.general.es
Message-ID <12267855.101308868755303.JavaMail.rafael@desarrollo>
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.com

Hola, 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" :)



-----BEGIN PGP SIGNATURE-----
Version: GnuPG/MacGPG2 v2.0.14 (Darwin)

iEYEARECAAYFAk4Dq18ACgkQTc4QiYN6hDdrPwCbBxdMMw1Cn+OY4QOpkOvVLz0b
lMEAn0rmOpjc9kKy/MQymf+KeaRO6JC9
=Z4hU
-----END PGP SIGNATURE-----

-- 
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.