sql >> Database >  >> RDS >> Mysql

Ik kan de invoer van dubbele namen niet voorkomen

Er zijn nogal wat dingen mis hier.

U gebruikt een MySQL-zoekwoord list als een functie, en dat alleen al zal u problemen opleveren.

Sidenote:Ja, ik weet dat het geen "gereserveerd" woord is, het is een "trefwoord" en MySQL behandelt zoekwoorden speciaal als ze als een functie worden gebruikt, en dat is wat u nu doet in uw tweede zoekopdracht , en is de manier waarop MySQL het interpreteert als; een functie in plaats van een tabeldeclaratienaam.

Ik stel voor dat je die tabel hernoemt naar lijsten, of er vinkjes in zet.

Je mixt ook MySQL API's/functies die niet met elkaar vermengd zijn.

Dus je nieuwe code zou lezen als,
terwijl je $selected = mysql_connect('christmas', $dbhandle); laat vallen

$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);

Uw code staat ook open voor een SQL-injectie. Gebruik een voorbereide verklaring.

Nu hebben we geen idee waar al je variabelen vandaan komen.

Gebruik foutrapportage.

Ik raad u ook aan een voorwaardelijke empty() . te gebruiken voor uw variabelen/invoer.

Anders kunt u ook andere fouten krijgen waarover MySQL kan klagen.

D.w.z.:

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

Om er zeker van te zijn dat er geen dubbele vermeldingen in uw database zijn, kunt u een UNIEKE beperking instellen.



  1. Invoegen in Oracle geneste tabel in Java

  2. MySQL:een reeks kolommen beperken, zodat ten minste één niet NULL is

  3. MYSQL selecteer DISTINCT-waarden in twee kolommen

  4. Hoe UTC naar lokale tijd te converteren in MySQL