Det behöver inte vara en loop eftersom det är LIMIT 1. Man kan köra med if istället.
PHP-kod:
if($row = mysql_fetch_assoc($result))
behandla existerande rad
else
insert
Som crazzy skrev skulle jag använda UNIQUE, men det är som sagt inget svar på varför det inte fungerar som det är nu.
Varför kör du med stripslashes() på det du läser från DB? Det ska normalt inte behövas.
Jag antar att innehållet i $url inte kan påverkas från klientsidan, eller att det är kontrollerat med regexp eller liknande. Om inte måste du köra mysql_real_escape_string() på den också, både vid SELECT och INSERT.