mi spiace quando credevo di essermi spiegato bene ed invece risulta non sia vero.
ci riprovo.
La tua query ha il seguente significato:
inserisci una riga nuova se non esiste gia' la chiave unica. Se esiste di gia' la chiave unica non inserire una riga nuova ma aggiorna, se il caso, la riga esistente con i nuovi dati.
Siamo d'accordo fin qui? Yes, si, oui ???? Se non siamo d'accordo significa che fai una cosa errata.
Mysql, che non e' scemo, NON AGGIORNA un record con gli stessi dati, ma solo se almeno uno dei dati e' diverso. Quindi serve 'na mazza mettere le if nell'update.
A questo punto la tua query, siccome quello che fai e' un INSERT oppure un UPDATE oppure nulla, rende il numero delle righe "lavorate" dalla query stessa:
0 = il record esiste ed e' identico al contenuto della query insert. Nessuna variazione
1 = il record NON esiste ed e' stato inserito. Trovi un nuovo record inserito
2 = il record esisteva ed il contenuto dell'UPDATE era diverso dall'esistente e quindi ha rimosso il presente e riscritto l'aggiornato con lo stesso id del rimosso. Trovi il record aggiornato.
quindi se fai un controllo con mysql_affected_rows a seconda del numero ricevuto saprai se:
0 righe ---> ha fatto nulla
1 riga ---> ha insertito un record nuovo
2 righe ---> ha cancellato (azione 1) e riscritto (azione 2) il record modificandolo.
Se ancora non mi sono spiegato vado a fare un salto (con l'elastico) dal ponte delle streghe.
@ edit..... e metti le apici ai valori stringa. Cioe', almeno scrivere correttamente la query. E pure la IF.... scrivi come previsto dal manuale - ON DUPLICATE KEY UPDATE -

Rispondi quotando
Grazie per la tua pazienza ma mysql_affected_rows mi ritorna sempre 2 anhe quando i dati che voglio inserire sono identici a quelli gia esistenti
