sql >> Database teknologi >  >> RDS >> Mysql

Jeg kan tilsyneladende ikke forhindre duplicate Name-input

Der er en del ting galt her.

Du bruger et MySQL søgeord list som en funktion, og det alene vil give dig problemer.

Sidenote:Ja, jeg ved, at det ikke er et "reserveret" ord, det er et "søgeord", og MySQL behandler søgeord specielt, hvis de bruges som en funktion, hvilket er det, du gør nu i din anden forespørgsel , og er den måde, MySQL tolker det som; en funktion i stedet for et tabeldeklarationsnavn.

Jeg foreslår, at du omdøber den tabel til lister eller pakker den ind i flueben.

Du blander også MySQL API'er/funktioner, der ikke blandes sammen.

Så din nye kode ville læse som,
mens du dropper $selected = mysql_connect('christmas', $dbhandle);

$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 kode er også åben for en SQL-injektion. Brug en forberedt erklæring.

Nu har vi ingen idé om, hvor alle dine variabler kommer fra.

Brug fejlrapportering.

Jeg foreslår også, at du bruger en betinget empty() for dine variabler/input.

Ellers kan du også få andre fejl, som MySQL kan klage over.

Dvs.:

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

I sidste ende og for at sikre dig, at der ikke er duplikerede poster i din database, kan du indstille en UNIK begrænsning.



  1. Få den aktuelle AUTO_INCREMENT-værdi for enhver tabel

  2. Forbind Android-appdata med webstedsdatabase

  3. Sådan forbinder du ekstern MySQL-database i PHP

  4. SQL Group BY ved hjælp af strenge i nye kolonner