sql >> Base de Datos >  >> RDS >> Mysql

Parece que no puedo evitar entradas de nombres duplicados

Hay bastantes cosas mal aquí.

Está utilizando una list de palabras clave de MySQL como una función, y eso solo le causará problemas.

Nota al margen:Sí, sé que no es una palabra "reservada", es una "palabra clave" y MySQL trata las palabras clave especialmente si se usan como una función, que es lo que está haciendo ahora en su segunda consulta , y es la forma en que MySQL lo interpreta como; una función en lugar de un nombre de declaración de tabla.

Te sugiero que cambies el nombre de esa tabla a listas o la envuelvas en ticks.

También está mezclando funciones/API de MySQL que no se entremezclan.

Entonces, su nuevo código se leería como,
mientras suelta $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);

Su código también está abierto a una inyección de SQL. Use una declaración preparada.

Ahora, no tenemos idea de dónde provienen todas sus variables.

Utilice el informe de errores.

También te sugiero que uses un condicional empty() para sus variables/entradas.

De lo contrario, también puede obtener otros errores de los que MySQL puede quejarse.

Es decir:

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

En última instancia, y para asegurarse de que no haya entradas duplicadas en su base de datos, puede establecer una restricción ÚNICA.