mysqli_error mysql_query imprimir error checking catch php mysql error-handling

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 :)