Foros del Web » Programando para Internet » PHP »

Problema con mysql_insert_id

Estas en el tema de Problema con mysql_insert_id en el foro de PHP en Foros del Web. Hola. Estoy tratando de hacer un script en el que quiero que me visualice el último registro que he insertado en una tabla. Para ello ...
  #1 (permalink)  
Antiguo 17/03/2011, 04:53
 
Fecha de Ingreso: agosto-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Problema con mysql_insert_id

Hola.
Estoy tratando de hacer un script en el que quiero que me visualice el último registro que he insertado en una tabla. Para ello utilizo al función mysql_insert_id:

$conn=mysqli_connect('localhost', 'user', 'key', 'bd');
if (mysqli_connect_errno()) {
echo 'Error: No se ha podido conectar con la Base de Datos.';
exit;
}
$query="insert into tabla values
(NULL,'".$articulo."',".$precio.",'".$fecha."','". $tarjeta."','".$comercio."')";
$res=$conn->query($query);
if ($res){
$ultimo=mysql_insert_id($conn);
echo "Se ha insertado la siguiente compra:";
$query2="select * from compras where IdCompra=$ultimo";

pero mysql_insert_id no me devuelve nada. Si pongo
echo "Ultimo id insertado: ".$ultimo;
me devuelve
Ultimo id insertado:
y nada más.

He estado viendo en este y otros foros y no veo el error. Quizá el problema esté en la configuración de PHP, pero no sé qué mirar.

Si alguien me puede ayudar se lo agradecería.
  #2 (permalink)  
Antiguo 17/03/2011, 05:06
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Problema con mysql_insert_id

Pregunta. En tu tabla cual es tu primary key? es un id auto incrementado? Si es así puedes hacer:

$sql="select * from compras ORDER BY id DESC LIMIT 1";

También el problema puede ser que no inserte correctamente a la base de datos.
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
  #3 (permalink)  
Antiguo 17/03/2011, 06:14
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 2 meses
Puntos: 128
Respuesta: Problema con mysql_insert_id

donde aprendiste a realizar inserts

insert into tabla values
(NULL,'".$articulo."',".$precio.",'".$fecha."','". $tarjeta."','".$comercio.



eso esta super mal, lee primero como realizar querys a la base de datos, dado que aca no especificas a que campo de la tabla deseas insertar, ademas para que insertar un valor NULL realmente no se entiende, imprime en tu codigo la variable $query luego ejecutala en el PhpMyAdmin y veras los errores que tienes
  #4 (permalink)  
Antiguo 17/03/2011, 06:17
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años, 1 mes
Puntos: 26
Respuesta: Problema con mysql_insert_id

Ala! Se me paso por alto ese detalle!
Le doy la razon a bUllan9ebrio
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
  #5 (permalink)  
Antiguo 17/03/2011, 06:19
Avatar de Ribon  
Fecha de Ingreso: septiembre-2010
Ubicación: El firmamento
Mensajes: 487
Antigüedad: 13 años, 7 meses
Puntos: 91
Respuesta: Problema con mysql_insert_id

mysql_insert_id retorna el ultimo PRIMARY KEY ingresado en la base de datos pero solo si este tiene el atributo auto_increment asociado a el.

ayudaría si nos muestras la estructura de tu tabla

saludos
  #6 (permalink)  
Antiguo 17/03/2011, 11:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Problema con mysql_insert_id

Gracias por vuestras respuestas.

Mi clave primaria se llama IdCompra y es autoincremental.
Las inserciones se hacen corectamente. De todas formas he probado con

$query="insert into compras(Descripcion,Precio,Fecha,Tarjeta,Comercio) values('".$articulo."',".$precio.",'".$fecha."','" .$tarjeta."','".$comercio."')";

y se inserta bien pero me saca el mensaje

Warning: mysql_insert_id() expects parameter 1 to be resource, object given in C:\........\insertarCompra.php on line 44

A continuación escribe

Ultimo id insertado: Se ha insertado la siguiente compra:

por lo que deduzco que mysql_insert_id() no devuelve nada. Creo que el parámetro está bien puesto: mysql_insert_id($conn). Si la conexión fallara habría sacado el mensaje de error correspondiente.

La estructura de la tabla es:
IdCompra. Integer. Not NULL. Autoincremental. Clave primaria.
Descripcion. Varchar(45)
Precio. Double
Fecha. Datetime
Tarjeta. Varchar(45)
Comercio. Varchar(45)

Gracias de nuevo.
  #7 (permalink)  
Antiguo 17/03/2011, 12:47
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Problema con mysql_insert_id

Muéstranos el código desde donde conectas a tu BD
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #8 (permalink)  
Antiguo 17/03/2011, 14:36
 
Fecha de Ingreso: marzo-2011
Mensajes: 30
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Problema con mysql_insert_id

Creo que estas mezclando metodologias!

Necesitas ver si utilizaras metodologia orientada a objetos o por procedimientos:

$res=$conn->query($query);

es por objetos y

$ultimo=mysqli_insert_id($conn);

es por procedimientos decidete! quiza solo con cambiar:

$res = $conn->query($query);

por:

$result = mysqli_query($query);

ya te va a funcionar el $ultimo=mysqli_insert_id($conn);

por que todo lo tienes por procedimiento y solo el query por objetos.... checale y nos avisas...

eso sin tomar en cuenta que no es lo mismo mysql que mysqli

Última edición por ppLu1Gui; 17/03/2011 a las 14:37 Razón: sintaxys error
  #9 (permalink)  
Antiguo 18/03/2011, 04:16
 
Fecha de Ingreso: agosto-2008
Mensajes: 7
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: Problema con mysql_insert_id

Efectivamente, tenía una buena mezcla.
Lo he dejado así:

$conn=new mysqli('localhost', 'user', 'key', 'bd');
if (mysqli_connect_errno()) {
printf("No se ha podido conectar con la Base de Datos. Error nº: %s\n",mysqli_connect_err());
exit();
}
$query="insert into compras(Descripcion,Precio,Fecha,Tarjeta,Comercio) values('".$articulo."',".$precio.",'".cambiaf_a_my sql($fecha)."','".$tarjeta."','".$comercio."')";
echo $query;
$res=$conn->query($query);
if ($res){
$ultimo=$conn->insert_id;
echo "Ultimo id insertado: ".$ultimo;
echo "Se ha insertado la siguiente compra:";
$query2="select * from compras where IdCompra=$ultimo";
$res2=$conn->query($query2);
if ($res2) {
.................
else{
echo "La compra no se ha insertado";
} //else
$conn->close();

y ya me funciona.

Gracias de nuevo por vuestras respuestas. Por mi parte podemos cerrar el hilo.

Etiquetas: Ninguno
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 08:38.