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:
$sql2 = "CREATE TABLE IF NOT EXISTS CONSOLAS (NOMCONSOLA VARCHAR(50), ID INT, PRIMARY KEY (NOMCONSOLA))";
$sql4 = "CREATE TABLE IF NOT EXISTS ESTUDIOS (NOMESTUDIO VARCHAR(50), ID INT, PRIMARY KEY (NOMESTUDIO))";
$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:
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.
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
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.
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.