Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não consigo evitar entradas de nome duplicado


Há algumas coisas erradas aqui.

Você está usando uma palavra-chave MySQL list como uma função, e isso por si só lhe causará problemas.

Nota lateral:Sim, eu sei que não é uma palavra "reservada", é uma "palavra-chave" e o MySQL trata as palavras-chave especialmente se usadas como uma função, que é o que você está fazendo agora na sua segunda consulta , e é a maneira que o MySQL está interpretando; uma função em vez de um nome de declaração de tabela.

Sugiro que você renomeie essa tabela para listas ou a envolva em ticks.

Você também está misturando APIs/funções do MySQL que não se misturam.

Portanto, seu novo código seria lido como
ao descartar $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);

Seu código também está aberto a uma injeção de SQL. Use uma declaração preparada.

Agora, não temos ideia de onde todas as suas variáveis ​​estão vindo.

Use o relatório de erros.

Também sugiro que você use um empty() condicional para suas variáveis/entradas.

Caso contrário, você também pode obter outros erros dos quais o MySQL pode reclamar.

Ou seja:
if(!empty($var)){...}

Por fim e para garantir que não haja entradas duplicadas em seu banco de dados, você pode definir uma restrição UNIQUE.