Perche' affected_row torna il numero di record modificati e anche se la query viene eseguita ma i valori non cambiano le modifiche effettive non ci sono state perche' i dati sono identici.
Se non error torna 0 se non ci sono modifiche e potresti usarlo al posto di 1 o cmq nell if controlli che sia 0 o superiore.
se -1(fallisce allora fai il resto)
edit http://www.php.net/manual/en/functio...ected-rows.php se guardi qui alla fine lo dice. In caso di nessun cambiamento puo' non tornare il numero di record