Avatar billede mjl Nybegynder
05. november 2005 - 10:34 Der er 10 kommentarer og
1 løsning

Insert hvor den ikke eksisterer

Hej der...

Jeg kan ikke finde ud af, hvordan jeg laver følgende:

Jeg skal INSERT hvor 'navn' ikke allerede eksisterer...!? (bruger PHP)

Kan du hjælpe?

hilsen Conrad
Avatar billede nielle Nybegynder
05. november 2005 - 10:43 #1
F.eks. sådan:

$sql = "SELECT count(*) AS antal FROM dinTabel WHERE navn='" . $navn ."'";
$query = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($query);

if ($row["antal"] == 0)
{
    $sql = "INSERT INTO dinTabel (navn) VALUES ('" . $navn . "')";
    mysql_query($sql) or die(mysql_error());

    echo "Navnet er tilføjet i databasen.";
}
else
{
    echo "Navnet var allerede i databasen.";
}
Avatar billede mjl Nybegynder
05. november 2005 - 10:50 #2
Okay - SaFøLi - den bruger jeg. 1000 tak for hjælpen!!! (Svar!) Du er en guttermand/kvinde...

Conrad
Avatar billede arne_v Ekspert
05. november 2005 - 11:16 #3
bør ihvertfald suppleres med et unikt index og håndtering af fejl ved insert
(fler bruger problematikken)
Avatar billede mjl Nybegynder
05. november 2005 - 11:20 #4
???
Avatar billede Slettet bruger
05. november 2005 - 11:43 #5
Det arne mener er at du kan komme til at lave insert af duplikat hvis der er flere brugere som forsøger insert af samme navn samtidigt. Hvis processen som laver select count(*) bliver preempted (stoppet) og en anden process tester samtidigt så vil begge tro at der er 0 rækker med navnet men begge vil efterfølgende lave insert. Derfor sæt et unique constrainet på kolonnen og håndter den fejl.
Avatar billede arne_v Ekspert
05. november 2005 - 11:46 #6
bruger 1: SELECT count(*) ... WHERE navn = 'Niels Nielsen' returnerer 0

bruger 2: SELECT count(*) ... WHERE navn = 'Niels Nielsen' returnerer 0

bruger 1: INSERT ... ('Niels Nielsen')

bruger 2: INSERT ... ('Niels Nielsen')

og så har du 2 gange Niels Nielsen i databasen
Avatar billede mjl Nybegynder
05. november 2005 - 13:30 #7
Ahh...ok. Tak...! Hvem skal ha' points!?
Avatar billede nielle Nybegynder
05. november 2005 - 14:07 #8
Det bestemer du jo selv - men jeg deler da gerne. :^)

Problemet med flere brugere, som kan komme til at oprette samme navn fordi de forsøger at oprette dem på samme tid, er lidt akademisk efter min mening. For det første skal de forsøge at oprette det samme navn, for det andet skal det ske på samme tid. Sådan noget sker kun når du har med en person som aktivt forsøger at hacke din side. Eller når der er tale om et system som er virkeligt pouplært og hvor der er rigtigt mange som tilmender sig. Men det er helt bestemt en problemstilling man som - professionel - udvikler skal have i tankerne.

... og et svar :^)
Avatar billede arne_v Ekspert
05. november 2005 - 14:16 #9
nielle har leveret kode mens jeg bare har øffet så lad bare point gå til ham

og ja sandsynligheden for samtidighes problemer er måske ikke stor, men det er
en god vane at kode efter at kunne håndtere den slags
Avatar billede mjl Nybegynder
05. november 2005 - 15:46 #10
Jeps...

Enig, også fordi dette system kun sjældent vil være besøgt af 2 pers. samtidigt, og fordi det kun er "sminke" - mit kald bruger "DISTINCT navn" så navnene hentes derfor kun 'en gang, men derfor er det jo rart, at brugerne ikke smider deres navn flere gange...

1000 tak for fin info., og for altis god hjælp!!!
Avatar billede mjl Nybegynder
05. november 2005 - 15:46 #11
"altis" skulle ha' været "altid" - sorry... ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester