Foros del Web » Programando para Internet » PHP »

cual es el mejor metodo para saber id insertado

Estas en el tema de cual es el mejor metodo para saber id insertado en el foro de PHP en Foros del Web. Hola gente, tengo esta duda Tengo una tabla opiniones y otra imagenes el usuario primero agrega su opinión y se almacena en la bd, ahí ...
  #1 (permalink)  
Antiguo 20/02/2012, 18:27
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
cual es el mejor metodo para saber id insertado

Hola gente, tengo esta duda

Tengo una tabla opiniones y otra imagenes

el usuario primero agrega su opinión y se almacena en la bd, ahí se genera el id_opinion (campo autoincrementable)

después pregunto al usuario si desea agregar imágenes (obviamente irán relacionadas a la opinión, la tabla imágenes tiene como llave foránea id_opinion)

el caso es que estuve leyendo y no me ha quedado totalmente claro si usar $id_opinion = mysql_insert_id() o $id_opinion = mysql_query("SELECT LAST_INSERT_ID()");

y es que el asunto aquí es que si por ejemplo dos usuarios están agregando una opinión "al mismo tiempo" es absolutamente necesario que no se vayan a "cruzar los id_opinion"

¿cuál de estas dos opciones me evitaría este problema?

y otra cosa, seria confiable guardar ese id que recuperare en una sesión? es que mis script's de inserción a la bd están en paginas diferentes y para saber que id se insertará en la tabla imágenes necesito abrir una sesión, pero no se que tan fiable es eso?

Gracias
  #2 (permalink)  
Antiguo 20/02/2012, 21:01
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: cual es el mejor metodo para saber id insertado

Cita:
mysql_insert_id() convertirá el tipo de retorno de la función nativa de MySQL en el API de C mysql_insert_id() a un tipo long (llamado int en PHP). Si su columna AUTO_INCREMENT tiene un tipo BIGINT (64 bits) la conversión puede resultar en un valor incorrecto. En su lugar, use la función interna de SQL en MySQL LAST_INSERT_ID() en una consulta SQL. Para más información sobre los valores máximos de integers, por favor vea la documentación de integer.
Por lo que entiendo es mejor usar la funcion nativa de mysql, por que al final de cuentas la funcion php hace uso de la misma funcion nativa de mysql, ademas que si es un autonumerico muy grande esa funcion regresa un valor erroneo
  #3 (permalink)  
Antiguo 21/02/2012, 10:06
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: cual es el mejor metodo para saber id insertado

Gracias por responder Sergestux

Mi campo autoincrement es un int(255)

de lo que había leído y me había gustado mucho (si entendí bien) es que el mysql_insert_id() te devuelve el id de la ultima sentencia de inserción que acabas de realizar exclusivamente del script que se esta ejecutando, según yo entiendo que no habría problema entonces con inserciones simultaneas. es correcto?

Entonces mysql_query("SELECT LAST_INSERT_ID()") me daría el mismo resultado?
  #4 (permalink)  
Antiguo 21/02/2012, 17:36
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: cual es el mejor metodo para saber id insertado

La unica condicion es que tienes que ejcutar esa sentencia justamente despues de insertar datos. Francamente veo muy complicado que exactamente al mismo tiempo lleguen las dos peticiones al servidor por la rapidez misma de ellos, pero si asi fuera primero deberia atender a un script php y despues al otro por lo que no deberian entrar en conflicto, de todos modos para asegurarte que no ocurra puedes usar transacciones
  #5 (permalink)  
Antiguo 21/02/2012, 17:45
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: cual es el mejor metodo para saber id insertado

Gracias Sergestux

Aunque al principio pensé que podía recuperar el id con alguna de estas funciones y guardarlo en una sesión, ahora no lo creo por la naturaleza de mi aplicación se me ha vuelto muy complicado, ya que el script donde recupero el id no es el mismo donde lo necesito insertar, entonces me devolvían 0 ya que como bien dices se debe ejecutar despues del insert, entonces opte por usar max(id) pero en definitiva no me quede satisfecha ya que no considero seguro hacerlo de esta forma. Aun tengo una esperanza de poder recuperar con una sesion el id despues de insertar y asi pasarlo al otro script, tratare de aferrarme a esa idea, pero también se me acaba el tiempo y necesito solucionarlo.

Si quieres saber un poco mi revoltijo puedes leer mi comentario (el cuarto comentario mio) donde trato de explicar breve y detalladamente mi aplicación aquí:

http://www.forosdelweb.com/f18/probl...-mysql-976596/

a lo mejor me puedas echar la mano. gracias
  #6 (permalink)  
Antiguo 21/02/2012, 21:37
Avatar de Sergestux  
Fecha de Ingreso: agosto-2007
Ubicación: Tapachula
Mensajes: 1.218
Antigüedad: 16 años, 8 meses
Puntos: 20
Respuesta: cual es el mejor metodo para saber id insertado

La manera mas logica y mas facil que veo es la misma que planteas. Es decir en el primer script despues de insertar recuperar el id y pasarselo por sesion al segundo script, de todos modos ese id es unico para cada usuario que se ejecute el script y te debes de asegurar de no perderlo usando sesiones para propagar ese valor.

Hay mucho problema pasar el id por URL y usar GET para recuperar el valor.

Perdon por escribir tan enredado
  #7 (permalink)  
Antiguo 22/02/2012, 09:41
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: cual es el mejor metodo para saber id insertado

ok mil gracias por tu ayuda

Etiquetas: imagenes, insertado, metodo, mysql, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:25.