$query = "SELECT * FROM #__com_songs_rating WHERE id = ".(int)$item->id;
quel 'WHERE id =' suona davvero male... che cosa è quell'id?
comunque io riscriverei la query, fatta salva la validazione che serve, come:
$query = "SELECT COUNT(*) FROM #__com_songs_rating WHERE id_song = '{$id_song}' AND ip_user = '{$ip_user}'" ;
dopo di che usi loadResult() per verificare l'unico valore che ti interessa, ovvero se c'è o meno il voto, e ti risparmi la doppia query di insert (ma usare un && nell'if, no?)
ciao,
marco