Ho usato ON DUPLICATE KEY UPDATE
Un sacco. Per alcune situazioni vale davvero la pena usare un'estensione SQL non standard.
Innanzitutto, devi assicurarti di avere un vincolo chiave univoco in atto. Il ON DUPLICATE KEY UPDATE
la funzione si attiva solo se si è verificata una violazione della chiave univoca.
Ecco un formato comunemente usato:
$query = "INSERT INTO $table (column1, column2, column3)
VALUES ('value-1', 'value-2', 'value-3')
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);"
column1 = values(column1)
significa "Aggiorna colonna1 con il valore che sarebbe stato inserito se la query non avesse raggiunto la violazione della chiave duplicata". In altre parole, significa semplicemente aggiornare la colonna 1 a come sarebbe stata se l'inserto avesse funzionato.
Guardando questo codice, non sembra corretto che tu stia aggiornando tutte e tre le colonne che stai cercando di inserire. Quale delle colonne ha un vincolo univoco su di essa?
EDIT:modifica in base al formato "SET" dell'istruzione di inserimento mysql in base alla domanda dell'OP.
Fondamentalmente per usare ON DUPLICATE KEY UPDATE
, scrivi semplicemente l'istruzione di inserimento come faresti normalmente, ma aggiungi il ON DUPLICATE KEY UPDATE
clausola attaccata alla fine. Credo che dovrebbe funzionare in questo modo:
INSERT INTO $table
set column1 = 'value-1',
column2 = 'value-2',
column3 = 'value-3'
ON DUPLICATE KEY UPDATE
column1 = values(column1),
column2 = values(column2),
column3 = values(column3);
Ancora una volta, una delle colonne che stai inserendo deve avere un indice univoco (o una combinazione delle colonne). Ciò può essere dovuto al fatto che una di esse è la chiave primaria o alla presenza di un indice univoco sulla tabella.