Problema rarísimo con php y base de datos

Iniciado por jamatbar, 19 Noviembre 2020, 20:05 PM

0 Miembros y 1 Visitante están viendo este tema.

jamatbar

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 (php) [Seleccionar]
$sql2 = "CREATE TABLE IF NOT EXISTS CONSOLAS (NOMCONSOLA VARCHAR(50), ID INT, PRIMARY KEY (NOMCONSOLA))";


Código (php) [Seleccionar]
$sql4 = "CREATE TABLE IF NOT EXISTS ESTUDIOS (NOMESTUDIO VARCHAR(50), ID INT, PRIMARY KEY (NOMESTUDIO))";


Código (php) [Seleccionar]
$sql6 = "CREATE TABLE IF NOT EXISTS JUEGOS ( NOMJUEGO VARCHAR(50) PRIMARY KEY, CONSOLA VARCHAR(50), "
                         . "ESTUDIO VARCHAR(50), CONSTRAINT fk_nombre_consola FOREIGN KEY (consola) REFERENCES consolas "
                         . "(nomconsola) ON DELETE CASCADE, CONSTRAINT fk_nombre_estudio FOREIGN KEY (estudio) REFERENCES "
                         . "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 (php) [Seleccionar]
if($tablaeliminar == "estudios"){
                        $sql = "ALTER TABLE JUEGOS DROP FOREIGN KEY fk_nombre_estudio; DROP TABLE IF EXISTS ESTUDIOS";
                        if (mysqli_query($conexion, $sql)) {
                            echo "<script>alert('Tabla estudios borrada correctamente');</script>";
                            header("refresh:0; url=administrador.php");
                        } else {
                            echo "Error: " . $sql . "<br>" . mysqli_error($conexion);
                        }
                        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.

jamatbar

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

el-brujo

CitarError: 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 ;

DROP TABLE IF EXISTS ESTUDIOS;

CitarLo 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.

Carloswaldo

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.