Använd en unique constraint
. Försök att infoga/uppdatera posten och fånga undantaget som kastas när den unika begränsningen överträds. Detta är det enda sättet att garantera en unik e-postadress; att först kontrollera och sedan uppdatera är utsatt för samtidiga problem eftersom det är möjligt att någon annan uppdaterar sin post till samma värde som du försöker ställa in precis efter att du gjorde kontrollen och innan du uppdaterar posten.
Lär dig också hur du använder where
-klausuler. Du hämtar nu ALLA poster, itererar över dem etc. vilket tar onödigt mycket resurser, tar för lång tid och bara är ett rent slöseri. Om du vill leta efter en post som matchar ett kriterium skriver du:
Select foo, bar from table where baz = 123
Där baz = 123
är ditt kriterium. Föreställ dig vad som skulle hända när du har 500, eller till och med 500 000 poster i din nuvarande inställning. Databasen skulle köra din fråga, samla ALLA rader från databasen, överföra dem till din applikation där din applikation skulle upprepa alla 500 000 resultat. Eller så ber du DB att göra det som den är bra på (och varför du använder den i första hand):Ge mig alla post(er) som matchar kriterium X. Du skulle få 1 eller inga poster (med tanke på den unika begränsning):1 =någon post matchar ditt kriterium, ingen =inga poster finns. Sparar överföring och "manuellt behöva titta på" 499 999 poster;-)