Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

LAST_INSERT_ID() é diferente de $db->insert_id?


O problema é que LAST_INSERT_ID(...); com um argumento não retorna o ID gerado, mas define o valor fornecido na "memória" de LAST_INSERT_ID() e o devolve. Portanto, em sua primeira execução, nenhum ID incrementado automaticamente foi gerado (você mesmo forneceu o valor) e LAST_INSERT_ID() retornar 0 . Nas execuções a seguir, você salva o valor next+1 no armazenamento interno de LAST_INSERT_ID() , que retorna o valor. Esse comportamento é descrito no MySQL em 12.14 Funções de informação :

Na verdade, você pode pular o LAST_INSERT_ID() ligue e trabalhe sem ele.
INSERT INTO
    officeRechNr (jahr,monat,zahl)
VALUES
    (?,?,1)
ON DUPLICATE KEY UPDATE zahl = zahl+1

Isso inserirá a linha (com o valor fornecido) ou aumentará o contador.

Se você quiser o contador atual para um determinado ano e mês, execute uma instrução SELECT simples. Lembre-se de que você pode precisar de transações ou bloqueios porque um cliente diferente pode aumentar o contador antes de buscá-lo com a instrução SELECT.