Foros del Web » Programando para Internet » PHP »

Repetir valor en sentencia sin UPDATE...

Estas en el tema de Repetir valor en sentencia sin UPDATE... en el foro de PHP en Foros del Web. Saludos... Tengo una query sencilla que toma los valores de un formulario: Código PHP: sql  =  "INSERT INTO mitabla ('id', 'nombre', 'apellido', 'numero') VALUES ('', '$nombre', '$apellido', '');  Si os fijáis, al campo de la mitabla ...
  #1 (permalink)  
Antiguo 09/02/2009, 16:44
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Repetir valor en sentencia sin UPDATE...

Saludos...

Tengo una query sencilla que toma los valores de un formulario:

Código PHP:
sql "INSERT INTO mitabla ('id', 'nombre', 'apellido', 'numero') VALUES ('', '$nombre', '$apellido', ''); 
Si os fijáis, al campo de la mitabla 'numero' no le asigno ninguna variable porque necesito que tenga el mismo número autonumérico del id.

Cómo lo puedo hacer sin necesidad de ejecutar una segunda sentencia después del INSERT para actualizar la tabla?

Gracias por vuestra ayuda.
__________________
Andrew :P
  #2 (permalink)  
Antiguo 09/02/2009, 16:49
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 11 meses
Puntos: 3
Respuesta: Repetir valor en sentencia sin UPDATE...

En prinicipio no necesitas hacer nada, si tanto 'id' como 'numero' son autoincrement y han empezado a la vez...
  #3 (permalink)  
Antiguo 09/02/2009, 16:56
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Repetir valor en sentencia sin UPDATE...

en una tabla no puedes tener dos campos autoincrement.
Lo que puedes hacer es antes del insert obtengas el ultimo id ingresado con mysql_insert_id(), luego sumarle uno a este e insertarlo( con el insert que estas realizado).

Sumarle uno porque es el id anterior al que vas a insertar.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
  #4 (permalink)  
Antiguo 09/02/2009, 17:00
Avatar de Anastasiaphp  
Fecha de Ingreso: junio-2006
Ubicación: El patio de mi casa
Mensajes: 196
Antigüedad: 17 años, 11 meses
Puntos: 3
Respuesta: Repetir valor en sentencia sin UPDATE...

Cita:
Iniciado por argy Ver Mensaje
en una tabla no puedes tener dos campos autoincrement.
uy! qué fallo, debe ser que aquí ya es de noche
  #5 (permalink)  
Antiguo 09/02/2009, 17:02
Avatar de andrewp  
Fecha de Ingreso: agosto-2003
Ubicación: Barcelona
Mensajes: 1.160
Antigüedad: 20 años, 8 meses
Puntos: 5
Respuesta: Repetir valor en sentencia sin UPDATE...

Gracias Argy...

Entonces debería hacer algo más o menos así:

Código PHP:
<?php
function get_current_insert_id($table)
{
    
$q "SELECT LAST_INSERT_ID() FROM $table";
    return 
mysql_num_rows(mysql_query($q)) + 1;
}
Cómo puedo convertir el 'return' en una variable?

Quizá así:

Código PHP:
<?php
function get_current_insert_id($table)
{
    
$q "SELECT LAST_INSERT_ID() FROM $table";
    
$var mysql_num_rows(mysql_query($q)) + 1;
}

// Y en my sql:

sql "INSERT INTO mitabla ('id', 'nombre', 'apellido', 'numero') VALUES ('', '$nombre', '$apellido', '[B]$var[/B]');
Gracias por vuestra ayudísima!
__________________
Andrew :P
  #6 (permalink)  
Antiguo 09/02/2009, 17:14
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Repetir valor en sentencia sin UPDATE...

No. mysql_insert_id() devuelve el id insertado en la última consulta hecha en el request actual. Por lo tanto, si antes no hubo ningún INSERT, no devolverá nada.

Para obtener el id próximo a insertar podemos hacer una consulta a la bd preguntándoselo:

Código php:
Ver original
  1. obtener_siguiente_id($tabla) {
  2.     $result = mysql_query("SELECT LAST_INSERT_ID() FROM $tabla");
  3.     return mysql_num_rows($result) + 1;
  4. }
Otra forma es usando la sentencia SHOW TABLE STATUS
Código php:
Ver original
  1. function obtener_siguiente_id($tabla) {
  2.     $result = mysql_query("SHOW TABLE STATUS LIKE '$tabla'");
  3.     $row = mysql_fetch_assoc($result);
  4.     return $row['auto_increment'];
  5. }
La última forma es la más segura. Pero de cualquier forma, esto siempre conlleva una consulta extra, así que la manera más sencilla de lograr lo que deseas, adrewp, es hacer el insert, y usando mysql_insert_id() actualizar el registro ingresado.

EDITO: Para coger el return basta con asignar la función a una variable:

Código php:
Ver original
  1. $var = obtener_siguiente_id("tabla");


Última edición por okram; 09/02/2009 a las 17:22
  #7 (permalink)  
Antiguo 09/02/2009, 17:19
Avatar de argy  
Fecha de Ingreso: octubre-2007
Ubicación: Longitud 75º Latitud 18º Sur
Mensajes: 614
Antigüedad: 16 años, 6 meses
Puntos: 18
Respuesta: Repetir valor en sentencia sin UPDATE...

dentro de tu función debes de hacer un return, luego si quieres puedes asignarle a una variable tu función y esa variable utilizarla para insertar.
__________________
Software libre para un mundo libre.

Eventualmente en el foro.
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:31.