sql >> Base de Datos >  >> RDS >> Mysql

LAST_INSERT_ID() no es igual a $db->insert_id?

El problema es que LAST_INSERT_ID(...); con un argumento no devuelve el ID generado sino que establece el valor dado en la "memoria" de LAST_INSERT_ID() y lo devuelve. Entonces, en su primera ejecución no se generó una ID incrementada automáticamente (usted proporcionó el valor) y LAST_INSERT_ID() devuelve 0 . En tus siguientes ejecuciones guardas el valor next+1 en el almacenamiento interno de LAST_INSERT_ID() , que devuelve el valor. Este comportamiento se describe en MySQL en 12.14 Funciones de información :

De hecho, puede omitir LAST_INSERT_ID() llamar y trabajar sin él.

INSERT INTO
    officeRechNr (jahr,monat,zahl)
VALUES
    (?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1

Esto insertará la fila (con el valor dado) o aumentará el contador.

Si desea el contador actual para un año y mes determinados, ejecute una instrucción SELECT simple. Tenga en cuenta que es posible que necesite transacciones o bloqueos porque un cliente diferente podría aumentar el contador antes de que lo obtenga con la instrucción SELECT.