mysql_query - php mysql insert error checking
Manejar error para entradas duplicadas-PHP MySQL (5)
Con la función mysql_error () http://php.net/manual/en/function.mysql-error.php
Tengo un formulario PHP que ingresa datos en mi base de datos MySQL. Mi clave principal es uno de los valores introducidos por el usuario. Cuando el usuario ingresa un valor que ya existe en la tabla, se devuelve el error de MySQL "Entrada duplicada ''valor ingresado'' para la clave 1". En lugar de ese error, me gustaría alertar al usuario de que necesita ingresar un valor diferente. Sólo un mensaje de eco o algo así. Supongo que mi pregunta se reduce a: cómo convertir un error específico de MySQL en un mensaje de PHP Gracias
edit: la respuesta de Nickf a continuación es buena, pero ¿hay alguna forma de discernir entre errores específicos?
Puede verificar el valor de retorno desde mysql_query
cuando realice la inserción.
$result = mysql_query("INSERT INTO mytable VALUES (''dupe'')");
if (!$result) {
echo "Enter a different value";
} else {
echo "Save successful.";
}
Utilice la función mysql_errno()
, devuelve los números de error. El número de error para las claves duplicadas es 1062. por ejemplo
$query = mysql_query("INSERT INTO table_name SET ...);
if (mysql_errno() == 1062){
echo ''Duplicate key'';
}
intente este código para manejar entradas duplicadas y mostrar el mensaje de eco:
$query = "INSERT INTO ".$table_name." ".$insertdata;
if(mysqli_query($conn,$query)){
echo "data inserted into DB<br>";
}else{
if(mysqli_errno($conn) == 1062)
echo "duplicate entry no need to insert into DB<br>";
else
echo "db insertion error:".$query."<br>";
}//else end
Para verificar este error específico, necesita encontrar el código de error . Es 1062
por clave duplicada. Luego usa el resultado de errno()
para comparar con:
mysql_query(''INSERT INTO ...'');
if (mysql_errno() == 1062) {
print ''no way!'';
}
Una nota sobre el estilo de programación.
Siempre debes tratar de evitar el uso de números mágicos (lo sé, yo fui quien lo introdujo en esta respuesta). En su lugar, podría asignar el código de error conocido ( 1062
) a una constante (por ejemplo, MYSQL_CODE_DUPLICATE_KEY
). Esto hará que su código sea más fácil de mantener, ya que la condición en la declaración if
aún se puede leer en unos pocos meses cuando el significado de 1062
ha desvanecido de la memoria :)