Foros del Web » Programando para Internet » PHP »

lastInsertId con PDO

Estas en el tema de lastInsertId con PDO en el foro de PHP en Foros del Web. Hola Grupo Espero puedan apoyarme con su ayuda. Tengo tres campos uno de ellos es "código" al momento de guardar la información guarda correctamente. Lo ...
  #1 (permalink)  
Antiguo 25/01/2022, 23:36
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 6
lastInsertId con PDO

Hola Grupo

Espero puedan apoyarme con su ayuda.

Tengo tres campos uno de ellos es "código" al momento de guardar la información
guarda correctamente.

Lo que me gustaría es lo siguiente, al momento de hacer un nuevo INSERT, debería tomar el Ultimo ID
y guardar en el campo "código" de la misma tabla, de esta forma: 'CASO-2022-1' el ID es auto incrementable
por lo que va aumentando, y cada vez que haga un nuevo INSERT guarda el ultimo algo así 'CASO-2022-14' etc..

ejemplo:

| nombre | codigo | fecha |
| Julio | CASO-2022-1 | 2021-12-25 01:01:01 |
| Juan | CASO-2022-2 | 2021-12-26 02:02:02 |



Código PHP:
<?php
include_once 'conn.php';

if(isset(
$_POST["operation"]))
{
    if(
$_POST["action"] == "add")
    {
        
// Esto si funciona.
        
$statement $conexion->prepare(
            
"INSERT INTO paciente (nombre, codigo, fecha)
            VALUES (:nombre, :codigo, :fecha)"
);
        
$result $statement->execute(
            array(
                
':nombre'    =>    $_POST["nombre"],
                
':codigo'    =>    $_POST["codigo"],
                
':fecha'    =>    $_POST["fecha"]
            )
        );
        
// Es una idea pero no me funciona.
        
$ultima $conexion->lastInsertId();
        
$codigo "CASO-".date("Y")."-".$ultima;        // CASO-2022-1,  CASO-2022-2, Etc..
        
$statement $conexion->prepare("UPDATE paciente SET codigo = $codigo WHERE idpaciente = '$ultima'");
        
$statement->execute();
        
$result $statement->execute(
            array(
                
':codigo'    =>    $_POST["codigo"]
            )
        );
    }
}
?>
  #2 (permalink)  
Antiguo 26/01/2022, 12:22
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 6
Respuesta: lastInsertId con PDO

Probé de esta forma pero no me trae el ultimo ID


Código PHP:
Ver original
  1. <?php
  2. include_once 'conn.php';
  3.  
  4. if(isset($_POST["operation"]))
  5. {
  6.     if($_POST["action"] == "add")
  7.     {
  8.         // Esto si funciona.
  9.         $statement = $conexion->prepare(
  10.             "INSERT INTO paciente (nombre, codigo, fecha)
  11.            VALUES (:nombre, :codigo, :fecha)");
  12.         $result = $statement->execute(
  13.             array(
  14.                 ':nombre'    =>    $_POST["nombre"],
  15.                 ':codigo'    =>    'CASO-2022-51', //  MODO MANUAL con un SOLO codigo para todos :(
  16.                 ':fecha'    =>    $_POST["fecha"]
  17.             )
  18.         );
  19.     }
  20. }
  #3 (permalink)  
Antiguo 29/01/2022, 19:31
Avatar de bandolera  
Fecha de Ingreso: abril-2009
Mensajes: 613
Antigüedad: 15 años
Puntos: 7
Respuesta: lastInsertId con PDO

Cita:
Iniciado por pilucho Ver Mensaje
Probé de esta forma pero no me trae el ultimo ID


Código PHP:
Ver original
  1. <?php
  2. include_once 'conn.php';
  3.  
  4. if(isset($_POST["operation"]))
  5. {
  6.     if($_POST["action"] == "add")
  7.     {
  8.         // Esto si funciona.
  9.         $statement = $conexion->prepare(
  10.             "INSERT INTO paciente (nombre, codigo, fecha)
  11.            VALUES (:nombre, :codigo, :fecha)");
  12.         $result = $statement->execute(
  13.             array(
  14.                 ':nombre'    =>    $_POST["nombre"],
  15.                 ':codigo'    =>    'CASO-2022-51', //  MODO MANUAL con un SOLO codigo para todos :(
  16.                 ':fecha'    =>    $_POST["fecha"]
  17.             )
  18.         );
  19.     }
  20. }
No me queda muy claro.
1) Los registros se ingresan de uno en uno o puede ser por lotes?
2) Tu campo CODIGO tiene al final un ID que quieres que se incremente. Pero el lastInsertId() es del anterior registro insertado, ese valor debe ser guardado en algún lugar, una tabla o en una variable de sesión.
Porque si inicias nuevamente y no has insertado nada, o el insert no tiene éxito el valor devuelto podría ser 0.
3) Cuál es la estructura de tu tabla.
__________________
Todos somos iguales. NO! a la violencia de género.
  #4 (permalink)  
Antiguo 01/02/2022, 18:13
 
Fecha de Ingreso: noviembre-2004
Ubicación: NULL
Mensajes: 652
Antigüedad: 19 años, 5 meses
Puntos: 6
Respuesta: lastInsertId con PDO

Cita:
Iniciado por bandolera Ver Mensaje
No me queda muy claro.
1) Los registros se ingresan de uno en uno o puede ser por lotes?
2) Tu campo CODIGO tiene al final un ID que quieres que se incremente. Pero el lastInsertId() es del anterior registro insertado, ese valor debe ser guardado en algún lugar, una tabla o en una variable de sesión.
Porque si inicias nuevamente y no has insertado nada, o el insert no tiene éxito el valor devuelto podría ser 0.
3) Cuál es la estructura de tu tabla.





1) Los registros se ingresan de uno en uno o puede ser por lotes?

R) Se ingresan uno en uno.

2) Tu campo CODIGO tiene al final un ID que quieres que se incremente. Pero el lastInsertId() es del anterior registro insertado, ese valor debe ser guardado en algún lugar, una tabla o en una variable de sesión.
Porque si inicias nuevamente y no has insertado nada, o el insert no tiene éxito el valor devuelto podría ser 0.

R) El "CODIGO" es un campo llamado "codigo", que debe guardar un nombre con el ultimo ID ej. "CASO-2022-51" ("51") viene hacer el ultimo ID, y si me guarda "0" usando el siguiente método.

Código PHP:
Ver original
  1. // Es una idea pero no me funciona.
  2.         $ultima = $conexion->lastInsertId();
  3.         $codigo = "CASO-".date("Y")."-".$ultima;        // CASO-2022-1,  CASO-2022-2, Etc..
  4.         $statement = $conexion->prepare("UPDATE paciente SET codigo = $codigo WHERE idpaciente = '$ultima'");
  5.         $statement->execute();
  6.         $result = $statement->execute(
  7.             array(
  8.                 ':codigo'    =>    $ultima
  9.             )
  10.         );


3) Cuál es la estructura de tu tabla.

R)

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `paciente` (
  2.   `idpaciente` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `codigo` VARCHAR(60) NOT NULL DEFAULT '',
  4.   `fecha` datetime DEFAULT NULL,
  5.   PRIMARY KEY (`idpaciente`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

Etiquetas: pdo
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 16:43.