Foros del Web » Programando para Internet » PHP »

cuando hago un insert into... puedo conocer el id asignado?

Estas en el tema de cuando hago un insert into... puedo conocer el id asignado? en el foro de PHP en Foros del Web. a ver si me explico, si ingresamos un nuevo registro en una tabla de la base de datos y necesito inmediatamente despues conocer el id ...
  #1 (permalink)  
Antiguo 02/08/2004, 08:18
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
cuando hago un insert into... puedo conocer el id asignado?

a ver si me explico, si ingresamos un nuevo registro en una tabla de la base de datos y necesito inmediatamente despues conocer el id que ha sido asignado, para, por ejemplo, generar un enlace dinamico...

resumiendo, si yo tengo:

Código PHP:
$consulta mysql_query("INSERT INTO table VALUES ('', '$dato1', '$dato2)"$bd); 
puedo conocer, que id ha sido asignado a este registro?


Pd. Si puede ser sin hacer otra consulta extrayendo el registro con el id mas grande...

Última edición por Nark; 02/08/2004 a las 08:20
  #2 (permalink)  
Antiguo 02/08/2004, 08:50
 
Fecha de Ingreso: octubre-2003
Mensajes: 146
Antigüedad: 20 años, 5 meses
Puntos: 1
mysql_insert_id
(PHP 3, PHP 4 )

mysql_insert_id -- Devuelve el identificador generado en la última llamada a INSERT
Descripción
int mysql_insert_id ( [int identificador_de_enlace])


mysql_insert_id() devuelve el identificador generado para un campo de tipo AUTO_INCREMENTED. Se devolvera el identificador generado por el último INSERT para el identificador_de_enlace. Si no se especifica el identificador_de_enlace, se asume por defecto el último enlace abierto.

>> Espero que te sirva.Saludos
__________________
·۰•●Pi®®ili●•۰· Lo esencial es invisible a los ojos
  #3 (permalink)  
Antiguo 02/08/2004, 08:52
 
Fecha de Ingreso: julio-2003
Mensajes: 141
Antigüedad: 20 años, 9 meses
Puntos: 5
Una cosa , te aconsejo que los 'insert' los definas con la siguiente sintaxis:
"insert into mitabla (col1,col2,col3,) values(valor1,valor2,valor3)";

Te lo digo porque si algun dia modificas los campos de "mitabla" añadiendo columnas, te ahorraras mas de una actualizacion de codigo.

Saludos !!
  #4 (permalink)  
Antiguo 02/08/2004, 09:23
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
Muchas gracias a los dos, problema solucionado!

pero viendo vuestras respuestas me surguen otras dos preguntas:

a) puedo conocer que id le tocaria si hiciera un insert into, no despues de hacer la consulta sino antes de hacerla, conocer que numero de identificador se generara


b) si yo tengo insert into mitabla (col1,col2,col3,) values(valor1,valor2,valor3) y añado una nueva columna en la tabla de la bd, al realizar esta consulta sin modificar nada, no daria error? no tendria que añadir valor4, aunque fuera un valor vacio?
  #5 (permalink)  
Antiguo 02/08/2004, 10:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
a) ..Al ser tu campo "ID" uno numérico y autoincremental (además de único) .. podrías hacer una consulta SQL tipo "MAX()" para ver que valor de esa "columna" (de toda la tabla) es su valor máximo.

SELECT MAX(id) FROM tabla

b) Esto ya sería un error de sintax:
insert into mitabla (col1,col2,col3,) values(valor1,valor2,valor3)

Si a tu tabla "mitabla" creas un nuevo campo ("columna") todos los registros de esa tabla para ese campo (columna) tomaran el valor que establezcas como predeterminado para ese tipo de dato de ese campo.

De todas formas .. es problable que el error no lo estés viendo que es bien diferente a "no se está produciendo".

Puedes usar estrucutras tipo:
Código PHP:
$resultado=mysql_query (.....SQL.....) or die(mysql_error()); 
Ahí te avisará (mostrará) sobre errores de SQL (de sintax .. etc) y de la própia conexión a la BD.

Un saludo,
  #6 (permalink)  
Antiguo 02/08/2004, 11:02
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
gracias Cluster, la solución a la pregunta a) seria siempre valida excepto cuando el ultimo registro se haya borrado, no?
  #7 (permalink)  
Antiguo 02/08/2004, 12:17
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No entendí bien que deseas validar .. o el tema del "último registro borrado" .. Un campo autoincremental .. si tu borras un registro queda el espacio y la cuenta sigue por el último que se generó. Ejemplo:

Si tenemos ID's de registros:
1,2,3,4
borramos el 3 ...
nos queda:
1,2,4

pero si insertamos otro registro seguiremos en:
1,2,4,5

No sé si esto resuelve parte de tu duda?.

Un saludo,
  #8 (permalink)  
Antiguo 02/08/2004, 13:15
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
No lo que me comentas ya lo conocia, el problema veo yo cuando se produzca lo siguiente:

tenemos:

a) 1, 2, 3, 4

se elimina el ultimo por x motivo, quedando:

b) 1, 2, 3

si realizo un insert into, tendremos lo siguiente:

c) 1, 2, 3, 5
(el 4, no se vuelve a cojer... salta)

muy bien, hasta aqui de acuerdo, pero si utilizo tu metodo y hago una consulta tal como tu me indicas:
Cita:
Al ser tu campo "ID" uno numérico y autoincremental (además de único) .. podrías hacer una consulta SQL tipo "MAX()" para ver que valor de esa "columna" (de toda la tabla) es su valor máximo
cuando estoy en el punto b) (o sea, tengo 1 2 3, y el 4 lo he borrado) y sacar el MAX me dara 3, si le sumo 1 tengo que el siguiente id sera el 4, pero resulta que va a ser el 5 porque el 4 es una clave eliminada.

Por lo tanto habria que buscar otro metodo que me indicase que clave auto_numerica se me generara en una tabla.
  #9 (permalink)  
Antiguo 02/08/2004, 15:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues entonces no sé .. si hay algo que se pueda hacer será por médio de SQL, podrías ir leyendo sobre el tema en:

http://dev.mysql.com/doc/mysql/en/ex...INCREMENT.html
http://dev.mysql.com/doc/mysql/en/mysql_insert_id.html

Por cierto .. para que quieres saber que ID -se va a generar -.. si en cualquier momento (salvo que bloques la tabla) lo puede tomar otro registro?

Un saludo,
  #10 (permalink)  
Antiguo 02/08/2004, 18:25
Avatar de living  
Fecha de Ingreso: mayo-2004
Mensajes: 1.266
Antigüedad: 19 años, 10 meses
Puntos: 2
Código PHP:
<?
$sql 
'SHOW TABLE STATUS FROM base_datos LIKE "tabla"';
$result mysql_query($sql);
$row mysql_fetch_assoc($result);
$nextIdValue $row['Auto_increment'];
?>
__________________
¿Te apasiona el mundo del guión? El portal del guión
  #11 (permalink)  
Antiguo 03/08/2004, 05:36
 
Fecha de Ingreso: agosto-2003
Mensajes: 102
Antigüedad: 20 años, 8 meses
Puntos: 0
Gracias living! eso es lo que estava buscando!!

Interesantes enlaces sobre SQL, Cluster gracias por la info.
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 12:14.