Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

228
Vistas
¿Cómo obtener el valor de la expresión de LAST_INSERT_ID(`my_column`+1)?

Tipo de base de datos: MariaDB
Motor de tabla: InnoDB

Tengo una tabla donde dentro tiene una columna con un valor que se está incrementando (no automático, no se inserta en esta tabla)

Cuando ejecuto la siguiente consulta SQL en phpMyAdmin, funciona bien como debería:

 UPDATE `my_table` SET `my_column` = LAST_INSERT_ID(`my_column` + 1) WHERE `my_column2` = 'abc'; SELECT LAST_INSERT_ID();

Lo anterior me devuelve el último valor de la tabla my_column cuando ocurrió la consulta. Esta consulta se tomó directamente de los documentos de mysql sobre el bloqueo: https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html (hacia abajo) y esta parece ser la forma recomendada de trabajar con contadores cuando no quieres que se vea afectado por otras conexiones.

Mi DOP:

 try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); // set the PDO error mode to exception $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = "UPDATE `my_table` SET `my_column` = LAST_INSERT_ID(`my_column` + 1) WHERE `my_column2` = 'abc'; SELECT LAST_INSERT_ID();"; // Prepare statement $stmt = $conn->prepare($sql); // execute the query $stmt->execute(); $result = $stmt->fetchColumn(); // causes general error $result = $stmt->fetch(PDO::FETCH_ASSOC);// causes general error // echo a message to say the UPDATE succeeded echo $stmt->rowCount() . " records UPDATED successfully"; } catch(PDOException $e) { echo $sql . "<br>" . $e->getMessage(); } $conn = null;

Error exacto SQLSTATE[HY000]: General error , si elimino las líneas donde intento obtener el resultado, actualiza la columna, pero aún no tengo un resultado de retorno... ¿cómo realizo esa consulta de actualización y obtengo el seleccione el resultado todo de una vez como lo hago cuando lo ejecuto en phpMyAdmin? Todo esto debe suceder de una vez según lo especificado en los documentos de MySQL, por lo que no tengo problemas en los que dos conexiones puedan obtener el mismo contador.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No es necesario realizar SELECT LAST_INSERT_ID(); . PDO guardará ese valor automáticamente para usted y podrá sacarlo de PDO.

Simplemente haz esto:

 $conn = new PDO("mysql:host=$servername;dbname=$dbname;charset=utf8mb4", $username, $password, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]); $sql = "UPDATE `my_table` SET `my_column` = LAST_INSERT_ID(`my_column` + 1) WHERE `my_column2` = 'abc'"; // Prepare statement $stmt = $conn->prepare($sql); // execute the query $stmt->execute(); $newID = $conn->lastInsertId();

lastInsertId() le dará el valor del argumento evaluado por LAST_INSERT_ID() .

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda