2012-09-15 15 views
6

Sto usando MySQL 5.1 ospitato presso il mio ISP. Questa è la mia interrogazioneErrore di sintassi con IF EXISTS UPDATE ELSE INSERT

mysql_query(" 
IF EXISTS(SELECT * FROM licensing_active WHERE title_1='$title_1') THEN 
    BEGIN 
     UPDATE licensing_active SET time='$time' WHERE title_1='$title_1') 
    END ELSE BEGIN 
     INSERT INTO licensing_active(title_1) VALUES('$title_1') 
    END 
") or die(mysql_error()); 

L'errore è

... check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS(SELECT * FROM licensing_active WHERE title_1='Title1') THEN ' at line 1 

Il mio compito attuale comporta

WHERE title_1='$title_1' AND title_2='$title_2' AND version='$version' ...ETC... 

ma ho ridotto verso il basso per rendere le cose più semplici per il mio problema solving

Nelle mie ricerche su questo, continuo a vedere i riferimenti a "ON DUPLICATE KEY UPDATE", ma non so cosa t o fare con quello.

risposta

19

Ecco una soluzione semplice e facile, provalo.

$result = mysql_query("SELECT * FROM licensing_active WHERE title_1 ='$title_1' "); 

if(mysql_num_rows($result) > 0) { 
    mysql_query("UPDATE licensing_active SET time = '$time' WHERE title_1 = '$title_1' "); 
} 
else 
{ 
    mysql_query("INSERT INTO licensing_active (title_1) VALUES ('$title_1') "); 
} 
+2

Questo funziona per me, grazie. E sembra semplice capire e ricordare. Potrebbe non essere super efficiente, ma questa non è ancora un'applicazione ad alto traffico quindi sono sicuro che questo metodo andrà bene per un anno o più. Grazie. – Openstar63

14

Questo dovrebbe fare il trucco per voi:

insert into 
    licensing_active (title_1, time) 
    VALUES('$title_1', '$time') 
    on duplicate key 
     update set time='$time' 

Ciò presuppone che title_1 è una colonna unica (recepita con il database) nella tabella.

Il modo in cui funziona insert... on duplicate è provare prima a inserire una nuova riga, ma se l'inserto viene rifiutato perché una chiave lo blocca, ti permetterà invece di aggiornare alcuni campi.

+0

Ciao Fluffeh. title_1 non è unico. L'unica colonna univoca che ho è un ID con nome int. È impostato come 'auto_increment', 'unique' e 'primary'. Non accedo direttamente Sto ancora lottando con lo stesso errore. – Openstar63

+0

Impossibile arrivarci, quindi ho fatto la logica in PHP, come descritto da Dark Wish. Grazie comunque. – Openstar63

+0

funziona per me quando rimuovo 'set' alla fine. cioè INSERIRE I VALORI

(col1, col2) ('f1', 'f2') SU DUPLICATE KEY UPDATE col2 = 'fn'' –