Mysql
 sql >> Database >  >> RDS >> Mysql

LAST_INSERT_ID() non è uguale a $db->insert_id?

Il problema è che LAST_INSERT_ID(...); con un argomento non restituisce l'ID generato ma imposta invece il valore dato nella "memoria" di LAST_INSERT_ID() e lo restituisce. Quindi, nella tua prima esecuzione non è stato generato alcun ID auto incrementato (hai fornito il valore da solo) e LAST_INSERT_ID() restituisci 0 . Nelle esecuzioni successive salvi il valore next+1 nella memoria interna di LAST_INSERT_ID() , che restituisce il valore. Questo comportamento è descritto in MySQL in 12.14 Funzioni informative :

In effetti, puoi saltare il LAST_INSERT_ID() chiama e lavora senza di essa.

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

Questo inserirà la riga (con il valore dato) o aumenterà il contatore.

Se si desidera il contatore corrente per un determinato anno e mese, eseguire una semplice istruzione SELECT. Tieni presente che potresti aver bisogno di transazioni o blocchi perché un altro cliente potrebbe aumentare il contatore prima che tu lo abbia recuperato con l'istruzione SELECT.