Código para conseguir el último ID de inserción de una tupla

43
Código para conseguir el último ID de inserción de una tupla. Por Miguel Angel Alvarez Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright. Creamos este artículo para responder una duda que nos han preguntado alguna vez en nuestro correo. Se trata sobre conseguir el último identificador de un registro insertado en la base de datos, programando con PHP y con la base de datos MySQL. Realmente es una duda muy sencilla de solucionar, gracias al rico juego de funciones de PHP para trabajar con bases de datos MySQL. Existe una función que nos devuelve directamente el identificador de la última inserción, utilizando la conexión a la base de datos que se le pase por parámetro, o la última conexión utilizada en caso de que no se le indique parámetro. mysql_insert_id($connectid) Ejemplo de utilización Veamos un ejemplo de la utilización de esta función, en el que se realizan las acciones necesarias para insertar un elemento en la base de datos. En este ejemplo utilizaremos una base de datos llamada "test" y la tabla "cliente". //conecto con la base de datos $connectid = mysql_connect("localhost","root",""); //selecciono la base de datos a utilizar mysql_select_db("test",$connectid); //Sentencia de inserción del elemento $ssql = "INSERT INTO cliente (nombre_cliente, cif, direccion, email) VALUES ('xxx Nombre empresa', 'B3331113', 'C/ Corona 2', '[email protected]')";

Transcript of Código para conseguir el último ID de inserción de una tupla

Page 1: Código para conseguir el último ID de inserción de una tupla

Código para conseguir el último ID de inserción de una tupla.Por Miguel Angel AlvarezAtención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Creamos este artículo para responder una duda que nos han preguntado alguna vez en nuestro correo. Se trata sobre conseguir el último identificador de un registro insertado en la base de datos, programando con PHP y con la base de datos MySQL.

Realmente es una duda muy sencilla de solucionar, gracias al rico juego de funciones de PHP para trabajar con bases de datos MySQL. Existe una función que nos devuelve directamente el identificador de la última inserción, utilizando la conexión a la base de datos que se le pase por parámetro, o la última conexión utilizada en caso de que no se le indique parámetro.

mysql_insert_id($connectid)

Ejemplo de utilización

Veamos un ejemplo de la utilización de esta función, en el que se realizan las acciones necesarias para insertar un elemento en la base de datos. En este ejemplo utilizaremos una base de datos llamada "test" y la tabla "cliente".

//conecto con la base de datos $connectid = mysql_connect("localhost","root","");

//selecciono la base de datos a utilizar mysql_select_db("test",$connectid);

//Sentencia de inserción del elemento $ssql = "INSERT INTO cliente (nombre_cliente, cif, direccion, email) VALUES ('xxx Nombre empresa', 'B3331113', 'C/ Corona 2', '[email protected]')";

//lo inserto en la base de datos if (mysql_query($ssql,$connectid)){

    //recibo el último id    $ultimo_id = mysql_insert_id($connectid);     echo $ultimo_id; }else{     echo "La inserción no se realizó"; }

Primero se conecta con MySQL y se selecciona la base de datos a utilizar. Luego se genera una sentencia SQL de inserción en una supuesta tabla de

Page 2: Código para conseguir el último ID de inserción de una tupla

clientes. Si la ejecución de esta sentencia es correcta se recibe el último ID con la función insert_id(). Si la ejecución de la sentencia falla, muestra un mensaje de error.

Fijémonos que insert_id() recibe el identificador de la conexión, devuelto por mysql_connect() y no el identificador de resultado de la consulta, que devuelve mysql_query() cuando se ejecutan sentencias de selección en la base de datos.

Page 3: Código para conseguir el último ID de inserción de una tupla

Obtener id antes de insertar en mysql

Como puedo obtener el id que va a tener un articulo antes de que lo inserte en la base de datos.. la id es auto_increment.

Yo he pensado en obtener el valor mayor de la id y sumar 1 pero no se si existe alguna solucion mejor para este caso..

Espero vuestras sugerencias

Gracias. Avisos Google

Advanced NMS DesignNMS Design & Integration Cable, Telco & Wireless Ecosystems www.integ.com/IS3"Master Recursos Humanos"Doble Titulación Europea Becas hasta el 75%. Ultimas Plazas! www.eude.esEmbedded Tools & ConsultRTOS,Compiler,Debugger,JTAG Debugger,Flasher,Starter Kits www.innis-intl.com__________________Ado_k2 :adios:

  #2 (permalink)   01/01/2011, 08:40

richicasas  Fecha de Ingreso: abril-2007Ubicación: ColombiaMensajes: 650

Respuesta: Obtener id antes de insertar en mysql

$idconexion = mysql_connect("localhost","root",""); $ultimoid = mysql_insert_id($idconexion); __________________Paginas web El karma es como el agua, no se le niega a nadie!!

  #3 (permalink)   01/01/2011, 09:07

fernandozunni   Fecha de Ingreso: febrero-2009

Page 4: Código para conseguir el último ID de inserción de una tupla

Mensajes: 195

Respuesta: Obtener id antes de insertar en mysql

No creo que haya una solución mejor, no conozco ninguna funcion (ni creo que la haya) que te regrese un id todavía no generado en la tabla.

mysql_insert_id() // te devuelve el id del ultimo insert hecho, no el que vas a insertar.

saludos y feliz año.

  #4 (permalink)   01/01/2011, 10:08

mariomon17  Fecha de Ingreso: noviembre-2009Mensajes: 574

Respuesta: Obtener id antes de insertar en mysql

¿Para que lo quieres saber? __________________Lost: "Tienes que dejarlo ir" :)

  #5 (permalink)   01/01/2011, 16:56

Ado_k2  Fecha de Ingreso: junio-2003Mensajes: 104

Respuesta: Obtener id antes de insertar en mysql

Cita: Iniciado por fernandozunni No creo que haya una solución mejor, no conozco ninguna funcion (ni creo que la haya) que te regrese un id todavía no generado en la tabla.

mysql_insert_id() // te devuelve el id del ultimo insert hecho, no el que vas a insertar.

saludos y feliz año.Es justamente lo que necesito mas rapido... y ademas si le sumo +1 sera el siguiente creo

yo, gracias compañeros la verdad que aquí uno siempre sale aprendiendo algo mas. __________________Ado_k2 :adios:

Page 5: Código para conseguir el último ID de inserción de una tupla

ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Avisos GoogleDiplomados a DistanciaEstudie desde casa u oficina (24 h) Ahorre hasta 50% del valor. 4 meses www.minternationalcenter.comSQL Database DesignerDesign, visualize, document and reverse engineer any database. www.modelright.com/Web based OLAP Clientfor Microsoft Analysis Services download Free Evaluation www.ReportPortal.com

  Herramientas Desplegado

  #1 (permalink)   23/02/2007, 10:49

dess01  Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

HOla a todos los foreros.!

Tengo un problema, que espero me puedan orientar.Les explico:

Tengo 3 tablas en mi base de datos(stoy utilizando el phpmyadmin). En mi código de php Hago un formulario que me permite guardar los datos que se capturen, hasta ahí va todo bien, peeeero, mi problema es que necesito que se guarde el id de la primera tabla a las otras dos tablas para relacionar a cual le corresponde a cual.

Por ejemplo:TABLA | C A M P O S tabla 1: id_esp, especialidadtabla 2: id_preg, preg, id_esptabla 3: id_resp, resp1, resp2, resp3, id_preg, id_esp

Los datos hasta ahorita los puedo guardar en "especialidad", "preg", "resp1", "resp2", "resp3". Los primeros id de cada tabla es autoincrementable, precisamente ese id, necesito que se guarde en el "id_esp" de la tabla 2 y 3 y el "id_preg" en la tabla 3.

Como sería la sentencia o el código para extraer ese valor autoincrementable de la

"id_esp" y guardarlo en los campos respectivos??? O estará mal mi lógica??

Page 6: Código para conseguir el último ID de inserción de una tupla

Pues lo ke he encontrado es haciendo un select pero tomando el nombre del id_esp= "?" , pero supuestamente ese dato es variable, va a estar cambiando conforme agregue mas especialidades, no siempre va a hacer el mismo valor.

Muchas gracias, espero su pronta ayuda.

Saludos a todos! Avisos Google

Curso Online de JavaAprende a programar Java y a desarrollar aplicaciones. Infórmate www.seas.es"Master Recursos Humanos"Doble Titulación Europea Becas hasta el 75%. Ultimas Plazas! www.eude.esLicenciatura a DistanciaEstudia sin asistir a clase, Licenciatura 100% a Distancia. www.aiu.edu

  #2 (permalink)   23/02/2007, 10:58

gerson  Fecha de Ingreso: febrero-2005Ubicación: LimaMensajes: 474

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Dale un vistazo a esto:http://www.php.net/manual/es/functio...-insert-id.php

salud2 __________________

  #3 (permalink)   23/02/2007, 10:59

sofiacharni  Fecha de Ingreso: julio-2005Mensajes: 21

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

El id tipo autoincrement se obtiene asi:

mysql_query("insert into especialidad....", $conexion)

Obtén el id generado con:

$id_esp = mysql_insert_id()

Page 7: Código para conseguir el último ID de inserción de una tupla

  #4 (permalink)   23/02/2007, 11:03

Carxl Colaborador

 Fecha de Ingreso: agosto-2006Ubicación: BogotáMensajes: 2.979

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Hola dess01.

Si lo que necesitas es el último valor autoincrementable de una tabla, lo obtienes como te dijeron arriba mysql_insert_id.

Sino es eso, es que está mal tu lógica.

Saludos. __________________Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)www.programandoweb.com

  #5 (permalink)   23/02/2007, 17:31

dess01  

Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Muxas muxas gracias, muchachos!

Ya lo he hecho y sí jala, pero no se qué estaré haciendo mal que el id me lo guarda en todos los registros del campo de la tabla 3.

Ejemplo:Cree 2 preguntas( en tabla2), y cada pregunta con sus 3 respuestas(tabla 3). Cuando cree la 1a pregunta (id_preg: 1) efecivamente si me guardó el id_preg en no_preg; hasta ahi vamos bien, Peeeo, cuando cree la 2a pregunta y las 3 respuestas noté que en tabla 3 a la respuesta anterior tambien guardó el mismo id.

TABLA 2id_preg | preg:1 | ¿***?

Page 8: Código para conseguir el último ID de inserción de una tupla

2 | ¿***?

TABLA 3id_resp: | resp1: | resp2: | resp3: | no_preg1 | resp1.1 | resp2.1 | resp3.1 | 22 | resp1.2 | resp2.2 | resp3.2 | 2

Segun yo así hice mi código:Código PHP: $connection = mysql_connect ("localhost")          or die ("No se puede conectar al servidor");       mysql_select_db ("base22feb")          or die ("No se puede seleccionar BD");

    // insertamos pregunta en la base de datos obtenida del formulario     mysql_query("INSERT INTO cat_preg (preg)     VALUES ('{$_POST['preg']}')",$connection);                   //aqui obtengo la id reciente     $id_preg = mysql_insert_id();               // insertamos respuestas en la base de datos obtenida del formulario

             mysql_query("INSERT INTO cat_resp (resp1, resp2, resp3)     VALUES ('{$_POST['resp1']}','{$_POST['resp2']}','{$_POST['resp3']}')",$connection);                    //aquí se me hace que esta mi fallo, please help!                  $instruccion = "update cat_resp set no_preg=$id_preg";              $actualizacion = mysql_query ($instruccion, $connection)              or die ("Fallo en el agregado de la id_preg"); 

En este último parrafo se me hace ke esta mi error, pues no stoy segura si deba ir el update u otra sentencia o función.De verdad muxas gracias, espero su apoyo para que me orienten por favor. Saluditos!!

  #6 (permalink)   25/02/2007, 21:40

dess01  

Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Oigan muxax@s, kreo ya se olvidaron de mi

Page 9: Código para conseguir el último ID de inserción de una tupla

hay alguien ke me pueda ayudar? porfis!

  #7 (permalink)   26/02/2007, 18:15

dess01  Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Holaa? ENtonces no hay nadie ke me pueda echar la mano? '(

  #8 (permalink)   27/02/2007, 01:27

El Patrón.  Fecha de Ingreso: abril-2006Ubicación: ColombiaMensajes: 648

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Hola

Bueno, pues tu codigo esta bien, pero lo que te ocurre es lo siguiente

update cat_resp set no_preg=$id_preg

Cuando tu realizas esa instruccion lo que estas haciendo es actualizando TODOS los registros de la tabla cat_resp asignando a todos los no_preg el mismo valor.

Solución: (lo que esta en verde)

mysql_query("INSERT INTO cat_preg (preg) VALUES ('{$_POST['preg']}')",$connection);

//aqui obtengo la id reciente $id_preg = mysql_insert_id();

// insertamos respuestas en la base de datos obtenida del formulario mysql_query("INSERT INTO cat_resp (resp1, resp2, resp3) VALUES ('{$_POST['resp1']}','{$_POST['resp2']}','{$_POST['resp3']}')",$connection); //traes el ultimo valor insertado en cat_resp para actualizar SOLO ese registro$id_resp = mysql_insert_id();//aquí se me hace que esta mi fallo, please help! $instruccion = "update cat_resp set no_preg=$id_preg WHERE id_resp = $id_resp";

Page 10: Código para conseguir el último ID de inserción de una tupla

asi, el solo actualizara el ultimo registro insertado en cat_resp

bueno, espero te sirva

suerte

  #9 (permalink)   27/02/2007, 19:08

dess01

 

Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Hola hola "Patrón", muxas gracias!!

Efectivamente ahi staba mi tonto error. Lo hice tal cual komo me dijiste y ya guarda el

"id_preg" respectivamente a la tabla de mis respuestas

Estuve leyendo algunos foros de este web y vi uno parecido a lo que yo necesitaba (sorry, no me dejaron meter vinculo)y hubo una respuesta que no entendí:

"Despues de insertar el registro en la tabla 1 puedes extraer el ultimo ID con la siguiente sentencia:

Código PHP:<?php$sql_1 = "SELECT MAX(id) FROM tabla1;"; realizas la consulta y extraes el valor obtenido y lo guardas en la otra tabla y listo ;)"

Ya que precisamente necesito hacer eso, pues ahora me falta insertar el "id_esp" para meterlo a la tabla 2 (cat_preg)y a la tabla 3 (cat_resp) para asociarlas. pero no me sale

Agregué ese parte en mi codigo así:

Código PHP:$connection = mysql_connect ("localhost") or die ("No se puede conectar al servidor"); mysql_select_db ("base22feb") or die ("No se puede seleccionar BD");     

Page 11: Código para conseguir el último ID de inserción de una tupla

//trayendo ultimo id de la tabla especialidad $id_esp= "SELECT MAX(id_esp) FROM especialidad";       // insertaremos los datos de la preg a la base de datos mysql_query("INSERT INTO cat_preg (preg) VALUES ('{$_POST['preg']}')",$connection);      $id_preg = mysql_insert_id();      //metiendo el ultimo id_esp insertado al cat_preg. se me hace que otra vez la estoy regando en esta parte. :'(  $instruccion = "update cat_preg set tipo_esp=$id_esp where id_preg= $id_preg"; $actualizacion = mysql_query ($instruccion, $connection) or die ("Fallo en el agregado de la id_esp");

.... 

Les tengo ke komentar ke en este codigo de php no tengo que hacer la consulta así:Código PHP:mysql_query("INSERT INTO cat_especialidad (especialidad)     VALUES ('{$_POST['especialidad']}')",$connection); 

ya que en este archivo php no está el fomulario ke me permitirá guardar los datos de la especialidad, eso lo hice en otro archivo php que tiene el enlace que me lleva a éste en donde esta el formulario de preguntas y respuestas.. Así que esta consulta de la

especialidad está en el formulario1.php . No sé si me explico bien..

ejemplo:

**formulario1.php** Nombre especialidad:______<boton guardar>Hacer encuesta <-- link

(al clickear en "guardar" y despues en "hacer encuesta" me lleva al formulario2.php)

**formulario2.php**Escribe pregunta: ______Escribe tu REsp1:____Escribe tu Resp2:____Escribe tu REsp3:____

<boton guardar>

Cuando cheko mi base de datos me doy cuenta que no guarda la "id_esp" de la tabla1 a la tabla2(tipo_esp) donde estan mis preguntas.

Page 12: Código para conseguir el último ID de inserción de una tupla

No sé si tenga ke ver que utilizo dos archivos para eso o definitivamente me falta alguna otra consulta que hacer para meter esa id.

Espero me puedan auxiliar prontito Porfis! GrAcIaS!

  #10 (permalink)   28/02/2007, 07:35

El Patrón.

 

Fecha de Ingreso: abril-2006Ubicación: ColombiaMensajes: 648

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Hola

Bueno, pues claro que lo puedes mejorar pues en el link podrias enviar el idespecialidad, es decir que el select max lo harias luego de insertar el dato de la especialidad para que el link lleve ese valor

Pero pues sirve igual que como lo planteas, de obtener el id maximo de especialidad en la pagina donde guardas la pregunta y las respuestas

lo que pasa en ese caso es que tienes que hacer 2 consultas separadas, es decir, una consulta para el id y otra para el update, tu ya tienes la segunda, lo que te faltaria es esto

Código PHP:<?$query_id_esp = mysql_query("Select max(id_esp) from especialidad");$r_id_esp = mysql_fetch_array($query_id_esp);//puse el echo para que veas el id, pero pues lo puedes quitar sin //problema

echo $id_esp = $r_id_esp[0];

Y ahora si la variable $id_esp tiene el valor numerico del id, porque tu tenias solo la consulta, y le asignabas a $id_esp una cadena que contenia la consulta y pues es por eso que no te estaba guardando el valor.

Espero te funcione bien, y si no por aqui andare, suerte.

  #11 (permalink)   28/02/2007, 10:39

Page 13: Código para conseguir el último ID de inserción de una tupla

dess01  

Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Gracias "Patrón", pero lo siento mas cómodo extrayendo el id_esp en el formulario2.php,

pero, ke krees! me salió un error ..

Me aparece un warning en la linea donde está este codigo: Código PHP:$r_id_esp = mysql_fetch_array($query_id_esp); 

Supuestamente mi código queda finalmente así, cierto?

Código PHP:$connection = mysql_connect ("localhost") or die ("No se puede conectar al servidor"); mysql_select_db ("base22feb") or die ("No se puede seleccionar BD");

//trayendo ultimo id de la tabla especialidad $query_id_esp = mysql_query ("Select max(id_esp) from especialidad"); $r_id_esp = mysql_fetch_array($query_id_esp);      $id_esp = $r_id_esp[0];       // Con esta sentencia SQL insertaremos los datos en la base de datos mysql_query("INSERT INTO cat_preg (preg) VALUES ('{$_POST['preg']}')",$connection);      $id_preg = mysql_insert_id();      //metiendo el último id_esp a la tabla cat_preg $instruccion = "update cat_preg set tipo_esp=$id_esp where id_preg= $id_preg"; $actualizacion = mysql_query ($instruccion, $connection) or die ("Fallo en el agregado de la id_esp"); 

Estuve leyendo en otro lado y vi algo así:Código PHP:$consulta = "SELECT MAX(ID) FROM notas"; $res = myql_query($consulta,$id); $ultima_nota = mysql_result(MAX(ID)"); 

o nada ke ver? Qué estaré haciedno mal?. ke alguien me expliquee

Page 14: Código para conseguir el último ID de inserción de una tupla

  #12 (permalink)   28/02/2007, 11:37

deet  

Fecha de Ingreso: mayo-2005Ubicación: Córdoba - ArgentinaMensajes: 267

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

sería mucho mas fácil ayudarte si pusieras el warning que te aparece en pantalla. __________________www.se-group.net

www.divisiongt.com.ar

  #13 (permalink)   28/02/2007, 11:54

dess01

 

Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

ok, sorry, asi dice:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\apachefriends\xampp\htdocs\27feb06\dos6-28feb07.php on line 32

la linea 32 es esta:

Código PHP:$r_id_esp = mysql_fetch_array($query_id_esp); 

de que se trata ese warning?

  #14 (permalink)   28/02/2007, 12:30

deet

 

Fecha de Ingreso: mayo-2005Ubicación: Córdoba - ArgentinaMensajes: 267

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Page 15: Código para conseguir el último ID de inserción de una tupla

ahi dice que la sentencia sql no es válida,

es extraño ya que es una consulta muy simple, tal vez sea una versión de mysql que no soporta max(), la verdad que desconozco a que se debe, nunca me ha sucedido algo igual, lo que se me ocurre es hacerlo de otra manera:

Código PHP:

//trayendo ultimo id de la tabla especialidad $query_id_esp = mysql_query ("Select id_esp from especialidad ORDER BY id_esp DESC LIMIT 0,1"); $r_id_esp = mysql_fetch_array($query_id_esp); 

esto no es lo óptimo pero creo que saca de apuros.

espero que te sirva. __________________www.se-group.net

www.divisiongt.com.ar

  #15 (permalink)   28/02/2007, 17:31

dess01  Fecha de Ingreso: febrero-2007Ubicación: MéxicoMensajes: 44

Re: ExTrAeR dAtO dE tAbLa CoN pHp y mYsQL

Eureka!

Me funciona ya de maravilla!, el error ke les expuse anterioremente fue por error de dedo

Por la emoción no me había percatado que había anotado mal el nombre de la tabla especialidad, oops, sorry!!

Muxas gracias muxax@s!! Los quiero Saluditos!.

Seguiré paseandome por el foro.

Page 16: Código para conseguir el último ID de inserción de una tupla

mysql_insert_id(PHP 4, PHP 5)

mysql_insert_id — Obtiene la ID generada en la última consulta

Report a bug

Descripción

int mysql_insert_id ([ resource $link_identifier ] )

Recupera el ID generado por una columna AUTO_INCREMENT por la consulta previa (normalmente INSERT).

Report a bug

Parámetros

link_identifier

La conexión MySQL. Si el identificador de enlace no se especifica, el último enlace abierto por mysql_connect() es asumido. Si no se encuentra dicho enlace, la función intentará establecer un nuevo enlace como si mysql_connect() fuese invocado sin parámetros. Si no se encuentra o establece una conexión, un error de nivel E_WARNING es generado.

Report a bug

Valores devueltos

La ID generada por una columna AUTO_INCREMENT por la consulta previa en caso de éxito, 0 si la anterior consulta previa no genera un valor AUTO_INCREMENT, o FALSE si no se estableció una conexión MySQL.

Report a bug

Page 17: Código para conseguir el último ID de inserción de una tupla

Ejemplos

Example #1 Ejemplo de mysql_insert_id()

<?php$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');if (!$link) {    die('Could not connect: ' . mysql_error());}mysql_select_db('mydb');

mysql_query("INSERT INTO mytable (product) values ('kossu')");printf("Last inserted record has id %d\n", mysql_insert_id());?>

Report a bug

Notas

Caution

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.

Note:

Because mysql_insert_id() acts on the last performed query, be sure to call mysql_insert_id() immediately after the query that generates the value. Como mysql_insert_id() en la última consulta que ha funcionado, asegúrese de llamar a mysql_insert_id() inmediatamente despues de la consulta que genera el valor.

Note:

El valor de la función SQL en MySQL LAST_INSERT_ID() siempre contiene el valor más recientientemente generado por AUTO_INCREMENT, y no es reseteado entre consultas.

Page 18: Código para conseguir el último ID de inserción de una tupla

obtener valor de otra tabla segun ID

Avisos GoogleChatea con tus AmigosBusca y Conecta con tus Amigos en Facebook®. Regístrate Ahora! www.Facebook.com"Master Recursos Humanos"Doble Titulación Europea Becas hasta el 75%. Ultimas Plazas! www.eude.esLicenciatura a DistanciaEstudia sin asistir a clase, Licenciatura 100% a Distancia. www.aiu.edu

Herramientas Desplegado

#1 (permalink)

22/02/2011, 02:40

crissrocca

Fecha de Ingreso: febrero-2011

Mensajes: 34

obtener valor de otra tabla segun ID

actualmente tengo creado esto, un paginador que lee de una tabla y muestra sus valores.

$resultados = mysql_query("SELECT id FROM phpbazar_ads WHERE publicview = 1");$total_registros = mysql_num_rows($resultados); $resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 ORDER BY precio DESC LIMIT $inicio, $registros"); $total_paginas = ceil($total_registros / $registros);

Page 19: Código para conseguir el último ID de inserción de una tupla

if($total_registros) {

while($articulo=mysql_fetch_array($resultados)) {echo "<b>".$articulo["catid"]."/".$articulo["subcatid"]."/".$articulo["subcat2id"]."/".$articulo["formato"]."</b><br>";echo "<b>".$articulo["precio"]."</b><br>";echo "<b>".$articulo["picture1"]."</b>";echo "<b>".$articulo["picture2"]."</b><br>";echo "<font color='#666666'>".$articulo["location"]."</font><br><br><br>";}

} else {echo "<font color='darkgray'>(sin resultados)</font>";}

esto funciona correctamente y muestra todos los valores con el ID de la tabla correspondiente phpbazar_ads.

lo que necesito hacer es que en lugar de mostrar los "ID", lea esos "ID" en la tabla phpbazar_adcat y muestre su valor "NAME".

asi mismo en "picture1" y "picture2" necesito que pinte la imagen, no el valor del campo en formato textual.

Avisos GoogleUltimate Windows ToolsTools to Administrate,Report,Alert Control, Secure, Deploy & Migrate. www.pointdev.com/Ideal_AdminWeb based OLAP Clientfor Microsoft Analysis Services download Free Evaluation www.ReportPortal.comCurso Online de JavaAprende a programar Java y a desarrollar aplicaciones. Infórmate www.seas.es

#2 (permalink)

22/02/2011, 03:38

bienpiyao Fecha de Ingreso: agosto-

Page 20: Código para conseguir el último ID de inserción de una tupla

2009

Mensajes: 153

Respuesta: obtener valor de otra tabla segun ID

Hola, para la primera cuestión prueba ésto:

Código PHP:

Ver original Copiar

$sql = "SELECT *

FROM phpbazar_ads";

$res = mysql_query($sql);

while($row = mysql_fetch_array($res))

{

$sql1 = "SELECT name

FROM phpbazar_adcat

WHERE id = '".$row["id"]."'";

$res1 = mysql_query($sql1);

echo 'LO QUE QUIERAS IMPRIMIR';

Page 21: Código para conseguir el último ID de inserción de una tupla

}

Espero que te sirva. Para lo de las fotos, tendrás que darme más datos como qué guardas en la base de datos (si la imagen, la ruta o el nombre), cómo la guardas y cómo la subes al servidor...

Cualquier duda, pregunta.

Un saludo!

#3 (permalink)

22/02/2011, 05:45

marcofbb

Fecha de Ingreso: junio-2009

Ubicación: Argentina

Mensajes: 454

Respuesta: obtener valor de otra tabla segun ID

Proba con la syntax INNER JOIN de MySQL

__________________Marcofbb | Artículos y Noticias sobre webmasters

La mejor forma de demostrarme que te ayude es con un gracias y karma =)

#4 (permalink)

22/02/2011, 10:41

crissrocca Fecha de Ingreso: febrero-2011

Mensajes: 34

Page 22: Código para conseguir el último ID de inserción de una tupla

Respuesta: obtener valor de otra tabla segun ID

la imagen la guarda en el servidor y en una tabla dentro del campo "picture1" escribe por ejemplo el nombre de la imagen "blue_picture.jpg".

respecto a lo que me has pasado, te refieres a usar lo que me has puesto o a incluir lo que me has puesto dentro de while($articulo=mysql_fetch_array($resultados)) {...

porque realmente a mi lo que tengo ahora me funciona perfecto, tan solo necesito que esos valores ID que recoge y pinta los cambie por el "name" que esta en otra tabla, relacionado por el mismo ID.

#5 (permalink)

22/02/2011, 10:44

crissrocca Fecha de Ingreso: febrero-2011

Mensajes: 34

Respuesta: obtener valor de otra tabla segun ID

Ok, por lo que veo seria algo asi.

SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo

voy a probarlo y os cuento.

#6 (permalink)

22/02/2011, 11:08

bienpiyao Fecha de Ingreso: agosto-2009

Page 23: Código para conseguir el último ID de inserción de una tupla

Mensajes: 153

Respuesta: obtener valor de otra tabla segun ID

Respecto a lo de las fotos, si guardas el nombre de la foto en un campo varchar en la base de datos, para mostrarla sería tan sencillo como:

Código PHP:

<img width="180" height="205" src="ruta/<?php echo $foto; ?>">

Dónde ruta/ es la ruta del servidor donde se encuentra la foto y $foto es el nombre de la foto.

Prueba lo otro como te dijo marcofbb y si no consigues solucionarlo, dímelo que te pongo otro ejemplo un poco más claro.

SaludoS!!

#7 (permalink)

22/02/2011, 17:28

crissrocca Fecha de Ingreso: febrero-2011

Mensajes: 34

Respuesta: obtener valor de otra tabla segun ID

actualmente he visto que no puedo usar:SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo

por que cada campo lo tiene que relacionar con una tabla diferente, digamos quetendria que ser algo asi:SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo SELECT campos FROM tabla1 INNER JOIN tabla3 ON tabla1.campo = tabla2.campo SELECT campos FROM tabla1 INNER JOIN tabla4 ON tabla1.campo = tabla2.campo

Page 24: Código para conseguir el último ID de inserción de una tupla

esto es un poco caotico y supongo que esto se puede realizar de alguna manera mas facil, a ver si alguien tiene idea de como relacionarlo.

el tema de mostrar la imagen ya me funciona con la siguiente linea:

Código PHP:

Ver original Copiar

<? if ($articulo['picture1']){ ?>

<img width="180" height="200" src="http://localhost/<?php echo $articulo['picture1']; ?>"><br/>

<? } else {

echo "<b>Sin Imagen</b>";

}?>

#8 (permalink)

22/02/2011, 21:28

argy

Fecha de Ingreso: octubre-2007

Ubicación: Longitud 75º Latitud 18º Sur

Mensajes: 615

Respuesta: obtener valor de otra tabla segun ID

mmm?, me late que debes de revisar tu modelo de BD, porque relacionar la misma columna con tantas tablas.

Utilizar una conexión al server dentro de un while no es recomendable.

__________________Software libre para un mundo libre.

Page 25: Código para conseguir el último ID de inserción de una tupla

Eventualmente en el foro.

#9 (permalink)

23/02/2011, 02:58

bienpiyao

Fecha de Ingreso: agosto-2009

Mensajes: 153

Respuesta: obtener valor de otra tabla segun ID

Me alegro que te funcionara lo de la foto, ahora a ver si solucionamos lo otro.

Prueba esto:

Código PHP:

$resultados = mysql_query("SELECT id FROM phpbazar_ads WHERE publicview = 1");$total_registros = mysql_num_rows($resultados);$resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 ORDER BY precio DESC LIMIT $inicio, $registros");$total_paginas = ceil($total_registros / $registros);

if($total_registros) {

while($articulo=mysql_fetch_array($resultados)) {

/*Aquí dentro debes hacer una consulta a la tabla phpbazar_adcat para sacar el NAME según el id*/

$sql = "SELECT nameFROM phpbazar_adcatWHERE id='".$variable."'";

$res= mysql_query($sql);$row = mysql_fetch_array($res);

Page 26: Código para conseguir el último ID de inserción de una tupla

/*Ahora, cada vez que el while de una vuelta, tendrás sólo 1 id, por tanto te sacará el nombre de ese id y ya sólo te queda imprimirlo con $row["name"];Debes sustituir $variable por aquella variable que contenga el campo que une las dos tablas (que no sé cuál es).*/

echo "<b>".$articulo["catid"]."/".$articulo["subcatid"]."/".$articulo["subcat2id"]."/".$articulo["formato"]."</b><br>";echo "<b>".$articulo["precio"]."</b><br>";echo "<b>".$articulo["picture1"]."</b>";echo "<b>".$articulo["picture2"]."</b><br>";echo "<font color='#666666'>".$articulo["location"]."</font><br><br><br>";}

} else {echo "<font color='darkgray'>(sin resultados)</font>";}

Pruébalo y me dices.

Un saludo!

#10 (permalink)

23/02/2011, 03:03

Lethiur

Fecha de Ingreso: marzo-2009

Mensajes: 21

Respuesta: obtener valor de otra tabla segun ID

Lo que yo haría sería guardar la ruta de la imagen en la base de datosde tal manera que al hacer la consulta, deberías de hacer esto.

Page 27: Código para conseguir el último ID de inserción de una tupla

Código PHP:

echo "<img src='$articulo['picture1']'>";

De tal manera lo que puedes hacer para leer las IDs

Código PHP:

$sql = "SELECT name FROM phpazard_ads WHERE id='".$articulo['id']."';";$query = mysql_query($sql,$link);while($row = mysql_fetch_array($query,MYSQL_NUM)){ echo $row[0]."\n";}

Para repetir eso para cada ID, puedes meterlo dentro de un bucle.

#11 (permalink)

23/02/2011, 15:15

crissrocca

Fecha de Ingreso: febrero-2011

Mensajes: 34

Respuesta: obtener valor de otra tabla segun ID

Cita:

Iniciado por bienpiyao

Me alegro que te funcionara lo de la foto, ahora a ver si solucionamos lo otro.

Page 28: Código para conseguir el último ID de inserción de una tupla

Prueba esto:

Código PHP:

$resultados = mysql_query("SELECT id FROM phpbazar_ads WHERE publicview = 1"); $total_registros = mysql_num_rows($resultados); $resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 ORDER BY precio DESC LIMIT $inicio, $registros"); $total_paginas = ceil($total_registros / $registros);

if($total_registros) {

while($articulo=mysql_fetch_array($resultados)) {

/*Aquí dentro debes hacer una consulta a la tabla phpbazar_adcat para sacar el NAME según el id*/

$sql = "SELECT name FROM phpbazar_adcat WHERE id='".$variable."'";

$res= mysql_query($sql); $row = mysql_fetch_array($res);

/*Ahora, cada vez que el while de una vuelta, tendrás sólo 1 id, por tanto te sacará el nombre de ese id y ya sólo te queda imprimirlo con $row["name"]; Debes sustituir $variable por aquella variable que contenga el campo que une las dos tablas (que no sé cuál es).*/

echo "<b>".$articulo["catid"]."/".$articulo["subcatid"]."/".$articulo["subcat2id"]."/".$articulo["formato"]."</b><br>"; echo "<b>".$articulo["precio"]."</b><br>"; echo "<b>".$articulo["picture1"]."</b>"; echo "<b>".$articulo["picture2"]."</b><br>"; echo "<font color='#666666'>".$articulo["location"]."</font><br><br><br>"; }

} else { echo "<font color='darkgray'>(sin resultados)</font>"; }

Page 29: Código para conseguir el último ID de inserción de una tupla

Pruébalo y me dices.

Un saludo!

Usando la sentencia:

Código PHP:

$sql = "SELECT name FROM phpbazar_adcat WHERE id='".$articulo['catid']."'";

$res= mysql_query($sql); $row = mysql_fetch_array($res);

he podido imprimir los resultados correctamente vinculandolo con las tres tablas que contienen el NAME relacionado con ese ID.

esta opcion era algo que habia valorado pero pensaba que se podria usar algo mas rapido y sencillo, ya que he tenido que realizar la query 3 veces y a su vez esta dentro de otra query que llena el while.. pero bueno, si funciona lo dejaremos asi.

muchas gracias!!

ahora voy a pegarme con la query principal

Código PHP:

$resultados = mysql_query("SELECT id FROM phpbazar_ads WHERE publicview = 1"); $total_registros = mysql_num_rows($resultados); $resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 ORDER BY precio DESC LIMIT $inicio, $registros"); $total_paginas = ceil($total_registros / $registros);

ya que tengo que recoger las variables que envia el FORM e incluirlas de esta forma

Código PHP:

$resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 AND catid =$_POST['catid'] OR subcatid=$_POST['subcatid'] OR subcat2id=$_POST['subcat2id'] OR formato=$_POST['formato'] OR location=$_POST['location']"); $total_registros = mysql_num_rows($resultados); $resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 AND catid =

Page 30: Código para conseguir el último ID de inserción de una tupla

$_POST['catid'] OR subcatid=$_POST['subcatid'] OR subcat2id=$_POST['subcat2id'] OR formato=$_POST['formato'] OR location=$_POST['location'] ORDER BY precio DESC LIMIT $inicio, $registros"); $total_paginas = ceil($total_registros / $registros);

actualmente las variables las recoge el PHP correctamente y si solo incluyo un valor, por ejemplo:

Código PHP:

$resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 AND catid =$_POST['catid'] ORDER BY id"); $total_registros = mysql_num_rows($resultados); $resultados = mysql_query("SELECT * FROM phpbazar_ads WHERE publicview = 1 AND catid =$_POST['catid'] ORDER BY precio DESC LIMIT $inicio, $registros"); $total_paginas = ceil($total_registros / $registros);

funciona correctamente, pero no consigo sacarlo diciendole que haga la query con todas las variables.

supongo que es algo que esta mal puesto en la query o que para varios valores tengo que ponerlo de otra manera, no?

#12 (permalink)

26/02/2011, 06:25

crissrocca

Fecha de Ingreso: febrero-2011

Mensajes: 34

Respuesta: obtener valor de otra tabla segun ID

al final he visualizado la query resultado de esta consulta y he visto que una variable siempre

Page 31: Código para conseguir el último ID de inserción de una tupla

pasaba un "0", de ahi el error al hacer las consultas.

Código PHP:

$sql = "SELECT * FROM phpbazar_ads WHERE publicview=1"; if($_GET['catid'] != '')$sql .= " AND catid LIKE '%".$_GET['catid']."%'"; if($_GET['subcatid'] != '')$sql .= " AND subcatid LIKE '%".$_GET['subcatid']."%'"; if($_GET['subcat2id'] != '')$sql .= " AND subcat2id LIKE '%".$_GET['subcat2id']."%'"; if($_GET['formato'] != '')$sql .= " AND formato LIKE '%".$_GET['formato']."%'"; if($_GET['location'] != '')$sql .= " AND location LIKE '%".$_GET['location']."%'"; $sql .= "ORDER BY fecha DESC";

$resultados = mysql_query($sql);

//y luego el resto del codigo...

ahora he pasado esa variable en caso de no estar seleccionada de "0" a "null" y funciona correctamnete.

gracias todos por la informacion.

Page 32: Código para conseguir el último ID de inserción de una tupla

Recuperar la id después de su inserción con php20 de abril de 2005 Autor: cmacias Archivado en PHP/MySQL, Tutoriales

Cuantas veces hemos necesitado saber el “id” del registro que acabamos de insertar? Con una sola línea de código es posible…

Hay ocasiones en las que es necesario recuperar la id del último registro insertado, bien sea para mostrarlo en pantalla, o para pasarlo mediante una variable para insertar un registro relacionado.

En php es muy sencillo, simplemente hay que usar la función?mysql_insert_id()

Una vez hacemos una inserción desde dreamweaver, necesitamos buscar las siguientes líneas

mysql_select_db($database_conn, $conn);$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());$insertGoTo = "ok.php";

Y añadir lo siguiente:

mysql_select_db($database_conn, $conn);$Result1 = mysql_query($insertSQL, $conn) or die(mysql_error());$id = mysql_insert_id();$insertGoTo = "ok.php?id=".$id;

De esta manera y así de fácil, podemos obtener el último registro insertado. Más información acerca de mysql_insert_id(); en :http://es.php.net/manual/es/function.mysql-insert-id.php

Puedes seguir las respuestas a este post mediante nuestro RSS 2.0 feed. Puedes dejar una respuesta, o un trackback desde tu sitio.

subscribete a los comentarios en formato RSS

Hay 6 comentarios en este post.

Page 33: Código para conseguir el último ID de inserción de una tupla

1. Alrevez dice:

04/05/2007 a las 1:38 am

Eso era preciso lo que estaba buscando, muchas gracias!

2. josue dice:

26/05/2008 a las 10:32 am

cmom puedo yo hacer eso en dream si modifico me borra el comportamiento s asi se dice

3. josue dice:

26/05/2008 a las 11:19 am

listo ya pude para lo q no puedan, modifiquen el codigo , aunq en el panel de comportamientos se desaparesca siempre sirve!!!

4. Andres Cayon dice:

26/05/2008 a las 8:04 pm

Josué:como has podido comprobar al editar el código, el comportamiento no desaparece sino que DW no lo reconoce porque no coincide con el código original. DW es muy estricto (quizá demasiado, pero es opinable) en ese aspecto.

5. josue dice:

30/05/2008 a las 2:09 pm

AMIGO AHORA TENGO UNA DUDA, COMO HAGO PARA ENVIAR ESO POR POST?? XQ EN LA SEGUNDA PAGINA, SE CAPTURA POR VARIABLE DE FORMULARIO (POST)… SE LLAMA ID2 GRACIAS AMIGO

Page 34: Código para conseguir el último ID de inserción de una tupla

6. Harold Hernan Gonzalez dice:

29/07/2009 a las 5:57 pm

Muchas gracias funciona muy bien.