PHP - No se cumple función SQL en PHP

 
Vista:
sin imagen de perfil
Val: 27
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por César (11 intervenciones) el 26/07/2020 19:15:51
Hola, disculpen, tengo un problema con un código y realmente no encuentro cuál es exactamente el problema, si el código, creo debería funcionar bien.

Estoy tratando de eliminar algo de una DB, tomando un dato en GET. El dato se recibe bien, encuentra coincidencias en la DB pero no elimina nada y me da un error.

El código es este:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
 
	/*Datos de conexion a la base de datos*/
	define('DB_HOST', 'localhost');
	define('DB_USER', 'root');
	define('DB_PASS', '');
	define('DB_NAME', 'db');
 
	$con=@mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);
    if(!$con){
        @die("<h2 style='text-align:center'>DB no conecta</h2>".mysqli_error($con));
    }
    if (@mysqli_connect_errno()) {
        @die("Conexión falló: ".mysqli_connect_errno()." : ". mysqli_connect_error());
    }
 
	if(isset($_GET["uid"])){
	$uid=$_GET["uid"];} else {
	$uid="";}
 
	$us=mysqli_query($con,"SELECT * from user where id=\"$uid\"");
while ($u=mysqli_fetch_array($us)) {
		$u_id = $u['id'];
    }
 
//Obtiene sin problemas el dato de la variable $us
 
	if(isset($_GET["uid"]) && $_GET["uid"]==$u_id){
echo "Sin problemas"; //Este echo se imprime sin problemas
echo $u_id; // Devuelve el valor 7
		$format=mysqli_query($con, "delete from file where user_id=$u_id");
			if ($format) {
		 echo "Eliminado exitosamente!";
	} else {
		 echo "Hubo un error al eliminar "; // Aquí me devuelve este echo
	}
	}
 
?>

Lo olvidaba, esta es la fila de la DB

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `file_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
INSERT INTO `file` (`id`, `user_id`) VALUES
 
(21,	7);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 2.154
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por Kathyu (680 intervenciones) el 26/07/2020 21:03:02
https://www.php.net/manual/es/mysqli.error.php

Use el método de mysqli_error y digamos que error le da MySQL por favor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por César (11 intervenciones) el 26/07/2020 21:09:25
El mensaje que me da es este:
1
Cannot delete or update a parent row: a foreign key constraint fails (`db`.`file`, CONSTRAINT `file_ibfk_1` FOREIGN KEY (`folder_id`) REFERENCES `file` (`id`))
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 2.822
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por joel (859 intervenciones) el 27/07/2020 08:46:40
Hola César, como te indica, tienes un problema con la clave foranea, ya que tienes un registro asociado en la tabla "user", por eso no lo puedes eliminar.

Tienes dos opciones:
1.- eliminas manualmente el registro asociado de la tabla "user" antes.
2.- crea un "delete en cascada", para que se eliminen los registros asociados

Para que lo elimine en cascada, tendrias que crear tu tabla algo así:
1
2
3
4
5
6
7
CREATE TABLE `file` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  CONSTRAINT `file_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de italo_pm
Val: 877
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por italo_pm (189 intervenciones) el 28/07/2020 02:20:02
Hola

Soy de la idea que de la base de datos no se debe de borrar nada, si de la gestion de usuarios se trata basta crear una campo de estado activo e inactivo o lo que mejor te paresca y gestionas esos estados... quieres borrarlos ahora que tienes pocos registros pero el dia que tengas miles de registros esa idea no se te pasara por la cabeza (cosa positiva) ya que sera simplemente un dolor de cabeza.

Y aun asi, si los elimanaras cual es el problema de ir adelante con el progresivo "desordenado" , la comidad de auto_increment es esa... borres lo que borres seguira adelante con el contador sin repetirilo incluyendo los eliminados....

salud2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 27
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

No se cumple función SQL en PHP

Publicado por César (11 intervenciones) el 28/07/2020 05:00:36
Hola, Joel. Muchas gracias por tu respuesta, me ha ayudado a solucionar el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar