sql >> Databáze >  >> RDS >> Mysql

Zdá se, že nemohu zabránit zadávání duplicitních jmen

Tady je docela dost věcí špatně.

Používáte klíčové slovo MySQL list jako funkce, a to samo o sobě vám způsobí problémy.

Vedlejší poznámka:Ano, vím, že to není „rezervované“ slovo, je to „klíčové slovo“ a MySQL zachází s klíčovými slovy speciálně, pokud jsou použita jako funkce, což je to, co nyní děláte ve svém druhém dotazu , a je to způsob, jakým to MySQL interpretuje jako; funkci spíše než název deklarace tabulky.

Navrhuji, abyste tuto tabulku přejmenovali na seznamy nebo ji zalomili čárkami.

Také mícháte MySQL API/funkce, které se nemíchají.

Váš nový kód by se tedy četl jako,
při vypouštění $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);

Váš kód je také otevřený pro SQL injekci. Použijte připravený výpis.

Nyní nemáme ponětí, odkud všechny vaše proměnné pocházejí.

Použijte hlášení chyb.

Také doporučuji použít podmíněné empty() pro vaše proměnné/vstupy.

V opačném případě můžete také získat další chyby, na které si může MySQL stěžovat.

T.j.:

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

Abyste se ujistili, že ve vaší databázi nejsou žádné duplicitní položky, můžete nastavit UNIKÁTNÍ omezení.



  1. Představujeme první platformu SaaS na světě, která bude poskytovat hloubkovou diagnostiku pro hybridní prostředí SQL Server

  2. Jak se spouštějí paralelní plány – část 4

  3. Jak vypočítat rozdíl mezi dvěma daty a časy v T-SQL

  4. Jak volat uloženou proceduru MySQL z kódu PHP?