Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: jamatbar en 19 Noviembre 2020, 20:05 pm



Título: Problema rarísimo con php y base de datos
Publicado por: jamatbar en 19 Noviembre 2020, 20:05 pm
Buenas, estoy haciendo una base de datos (videojuegos) con 3 tablas (consolas, estudios y juegos), la tabla juegos tiene dos claves foráneas, una que referencia a consolas y otra a estudios.

Tengo una página en la que conecto con sql y creo las tablas con los siguientes CREATES:

Código
  1. $sql2 = "CREATE TABLE IF NOT EXISTS CONSOLAS (NOMCONSOLA VARCHAR(50), ID INT, PRIMARY KEY (NOMCONSOLA))";
  2.  

Código
  1. $sql4 = "CREATE TABLE IF NOT EXISTS ESTUDIOS (NOMESTUDIO VARCHAR(50), ID INT, PRIMARY KEY (NOMESTUDIO))";
  2.  

Código
  1. $sql6 = "CREATE TABLE IF NOT EXISTS JUEGOS ( NOMJUEGO VARCHAR(50) PRIMARY KEY, CONSOLA VARCHAR(50), "
  2.                         . "ESTUDIO VARCHAR(50), CONSTRAINT fk_nombre_consola FOREIGN KEY (consola) REFERENCES consolas "
  3.                         . "(nomconsola) ON DELETE CASCADE, CONSTRAINT fk_nombre_estudio FOREIGN KEY (estudio) REFERENCES "
  4.                         . "estudios (nomestudio) ON DELETE CASCADE)";

Pues bien, el problema viene al querer eliminar una de las tablas (que no sea la tabla juegos). Escribo la siguiente sentencia:

Código
  1. if($tablaeliminar == "estudios"){
  2.                        $sql = "ALTER TABLE JUEGOS DROP FOREIGN KEY fk_nombre_estudio; DROP TABLE IF EXISTS ESTUDIOS";
  3.                        if (mysqli_query($conexion, $sql)) {
  4.                            echo "<script>alert('Tabla estudios borrada correctamente');</script>";
  5.                            header("refresh:0; url=administrador.php");
  6.                        } else {
  7.                            echo "Error: " . $sql . "<br>" . mysqli_error($conexion);
  8.                        }
  9.                        mysqli_close($conexion);

Y al intentar ejecutarlo en la web me aparece un fallo en la sql:

Error: ALTER TABLE JUEGOS DROP FOREIGN KEY fk_nombre_estudio; DROP TABLE IF EXISTS ESTUDIOS
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DROP TABLE IF EXISTS ESTUDIOS' at line 1

Lo extraño viene cuando pego esa misma sql sin cambiarla en la linea de comandos de la base de datos de phpmyadmin y me borra la tabla sin problemas.

Me estoy volviendo loco para solucionarlo. ¿Alguna ayuda?

Gracias de antemano y un saludo.


Título: Re: Problema rarísimo con php y base de datos
Publicado por: jamatbar en 19 Noviembre 2020, 23:53 pm
Ahora vuelvo a probar y ejecuto esto en la consola de sql:

ALTER TABLE JUEGOS DROP FOREIGN KEY FK_NOMBRE_CONSOLA

Y tampoco me hace nada,  dice que no encuentra la clave foránea. Estoy desesperado

#1091 - No puedo eliminar (DROP FOREIGN KEY) `fk_nombre_consola`. compuebe que el campo/clave existe


Título: Re: Problema rarísimo con php y base de datos
Publicado por: el-brujo en 25 Noviembre 2020, 19:14 pm
Citar
Error: ALTER TABLE JUEGOS DROP FOREIGN KEY fk_nombre_estudio; DROP TABLE IF EXISTS ESTUDIOS
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'DROP TABLE IF EXISTS ESTUDIOS' at line 1

Creo que falta añadirle un ;

Código:
DROP TABLE IF EXISTS ESTUDIOS;

Citar
Lo extraño viene cuando pego esa misma sql sin cambiarla en la linea de comandos de la base de datos de phpmyadmin y me borra la tabla sin problemas.

Que funcione en PHPMyAdmin no quiere decir que sea la misma sintaxis.

Lo mejor que puedes hacer es si estás en un entorno desarrollo y no de producción es  activar en PHP display errors on y mostrarlos por pantalla para ver exactamente dónde fallan las consultas SQL o si es tema de sintaxis en PHP.


Título: Re: Problema rarísimo con php y base de datos
Publicado por: Carloswaldo en 21 Abril 2021, 21:41 pm
Creo que el principal problema aquí es que no estás supuesto a ejecutar varias consultas en una sola llamada a mysqli_query. Prueba separando las consultas y evaluándolas una por una.