sql >> Databasteknik >  >> RDS >> Mysql

Jag verkar inte förhindra inmatning av dubbletter av namn

Det är en hel del fel här.

Du använder ett MySQL-sökord list som en funktion, och bara det kommer att orsaka dig problem.

Sidenote:Ja, jag vet att det inte är ett "reserverat" ord, det är ett "sökord" och MySQL behandlar nyckelord speciellt om de används som en funktion, vilket är vad du gör nu i din andra fråga , och är hur MySQL tolkar det som; en funktion snarare än ett tabelldeklarationsnamn.

Jag föreslår att du byter namn på den tabellen till listor, eller slår in den i bockar.

Du blandar också MySQL API:er/funktioner som inte blandas.

Så din nya kod skulle läsa som,
medan $selected = mysql_connect('christmas', $dbhandle); släpptes

$query = mysqli_query($dbhandle, "SELECT * FROM `list` WHERE name='$name'") 
        or die (mysqli_error($dbhandle));

if(mysqli_num_rows($query) > 0){
    echo 'that name already exists';
}else{
    mysqli_query($dbhandle, "INSERT INTO `list` (name, one, two, three, four, five, six, seven, eight) 
                VALUES ('$name' , '$one' , '$two' , '$three' , '$four' , '$five' , '$six', '$seven' , '$eight')") 
                 or die (mysqli_error($dbhandle));

}


mysqli_close($dbhandle);

Din kod är också öppen för en SQL-injektion. Använd ett förberett uttalande.

Nu har vi ingen aning om var alla dina variabler kommer ifrån.

Använd felrapportering.

Jag föreslår också att du använder en villkorlig empty() för dina variabler/indata.

Annars kan du också få andra fel som MySQL kan klaga på.

Dvs:

if(!empty($var)){...}

I slutändan och för att säkerställa att det inte finns några dubbletter i din databas, kan du ställa in en UNIK begränsning.



  1. exempel på oracle join syntax

  2. Hur man migrerar från Oracle till MySQL / Percona Server

  3. Mysql Datediff-fråga

  4. Skillnader i procedurmässiga och objektorienterade implementeringar av mysql i php?