Cómo obtener el error de duplicado de MYSQL para varias columnas únicas
Estoy tratando de obtener el mensaje de error o el código de mi consulta SQL. Actualmente, tengo mi método de esta manera en un archivo de clase:
public function createNew()
{
$query = "INSERT INTO " . $this->table_name . " SET userId = ?, email = ?, data1 = ?";
$obj = $this->conn->prepare($query);
$this->userId = htmlspecialchars(strip_tags($this->userId));
$this->email = htmlspecialchars(strip_tags($this->email));
$this->data1 = htmlspecialchars(strip_tags($this->data1));
$obj->bind_param("sss", $this->userId, $this->email, $this->data1);
if ($obj->execute()) {return true;}
return false;
}
Y aquí está el archivo PHP:
if ($_SERVER['REQUEST_METHOD'] === "POST") {
$data = json_decode(file_get_contents("php://input"));
$users->userId = $data->userId;
$users->email = $data->email;
$users->data1 = $data->data1;
if ($users->createNew()) {
http_response_code(200);
echo json_encode(array(
"status" => 200,
"message" => "Éxito"
));
} else {
http_response_code(200);
echo json_encode(array(
"status" => 500,
"message" => "Falló"
));
}
}
El código funciona correctamente, pero cuando se inserta un valor duplicado para el email o userId, obtengo el mensaje de error “Falló”. Lo que quiero es que el mensaje de error especifique si el userId ya existe o si el email ya existe en lugar de devolver siempre “Falló”. Gracias.
davy.ai
Para obtener un mensaje de error específico para valores duplicados en el método
createNew()
, puedes usar las funciones de manejo de errores demysqli
para verificar si se produce un error de clave duplicada después de ejecutar la consulta. Aquí tienes una versión actualizada del métodocreateNew()
:Este código verifica si se produce un error de clave duplicada (
errno
1062) después de ejecutar la consulta. Si se produce ese error, verifica el mensaje de error para ver en qué columna se encontró el valor duplicado y lanza unaException
específica con el mensaje de error correspondiente. Si el error no es un error de clave duplicada o el mensaje de error no es reconocible, lanza unaException
genérica con el mensaje “Error”.En tu archivo PHP, puedes capturar la
Exception
y devolver la respuesta apropiada:Este código captura la
Exception
lanzada por el métodocreateNew()
y devuelve el mensaje de error apropiado en la respuesta.