Borrar datos en tablas relacionadas

Te vuelvo a realizar otra pregunta en relación a la última que te hice hace unos pocos días.
Me ayudaste con la inserción de registros en tablas relacionadas y ahora necesito ayuda para el borrado de registros en tablas relacionadas.
Te explico de nuevo como lo tengo para que me ayudes:
Tengo 3 tablas:
Categorías
categoria_id
categoria_nombre
...
productos
producto_id
producto_nombre
...
productos_categorias
Producto_id (id de la tabla productos)
Categoria_id(id de la tabla productos)
La última tabla la utilizo para relacionar muchos productos a muchas categorías y viceversa, aunque todavía me faltan cosillas lo que ahora necesito es borrar un registro de la tabla productos.
Al estar relacionada con la tabla productos_categorias me saltaba el error de clave foránea etc. Bien, yo tengo el código php así, metido en una función.
Imprimo en pantalla tal y como me enseñaste el borrado del registro para ver donde fallo y me sale esto:
DELETE FROM fpcfontana_productos, fpcfontana_productos_categorias WHERE producto_id=434
He probado también así:
DELETE FROM $tabla_productos, $tabla_productos_categorias WHERE $tabla_productos_categorias.producto_id=$tabla_productos.producto_id AND
$tabla_productos.producto_id=434;
Pero nada de nada, no elimina nada.
Que estoy haciendo mal?
Te pongo el código de la función en php que estoy utilizando:
function eliminar_registroproducto_bd2 ($tipo, $id) {
// Elimina un registro determinado (devuelve E en caso de error o no encontrado)
    // Inicializacion de variables
        // Variables globales
            global $tabla_productos;
            global $tabla_productos_categorias;
            global $productos_upload;
            $productos_upload = "../" . $productos_upload;
    $rs = mysql_query("select * from $tabla_productos WHERE producto_id = '$id'");    
    $cant = mysql_num_rows($rs);
    if ($cant == 0) return "E";
    else {
        $imagen = $productos_upload . Mysql_result($rs,0,"producto_imagen1");
        $imagentb = $productos_upload . Mysql_result($rs,0,"producto_imagen1tb");
        if ((file_exists($imagen)) && (mysql_result($rs,0,"producto_imagen1")) != "") unlink ($imagen);
        if ((file_exists($imagentb)) && (mysql_result($rs,0,"producto_imagen1tb")) != "") unlink ($imagentb);
        $imagen = $productos_upload . Mysql_result($rs,0,"producto_imagen2");
        $imagentb = $productos_upload . Mysql_result($rs,0,"producto_imagen2tb");
        if ((file_exists($imagen)) && (mysql_result($rs,0,"producto_imagen2")) != "") unlink ($imagen);
        if ((file_exists($imagentb)) && (mysql_result($rs,0,"producto_imagen2tb")) != "") unlink ($imagentb);
        $imagen = $productos_upload . Mysql_result($rs,0,"producto_imagen3");
        $imagentb = $productos_upload . Mysql_result($rs,0,"producto_imagen3tb");
        if ((file_exists($imagen)) && (mysql_result($rs,0,"producto_imagen3")) != "") unlink ($imagen);
        if ((file_exists($imagentb)) && (mysql_result($rs,0,"producto_imagen3tb")) != "") unlink ($imagentb);
   // Eliminar registro de la base de datos        
        $sql = "DELETE FROM $tabla_productos, $tabla_productos_categorias WHERE producto_id=$id";
echo $sql;

1 respuesta

Respuesta
1
En lugar de:
$sql = "DELETE FROM $tabla_productos, $tabla_productos_categorias WHERE producto_id=$id";
deberías relacionar las tablas:
$sql = "DELETE FROM $tabla_productos, $tabla_productos_categorias WHERE $tabla_productos" . ".producto_id=$tabla_productos_categorias" . ".producto_id AND producto_id=$id";
Yo creo que tienes problemas porque los nombres de las tablas los tienes en variables cuando lo habitual es que sean unos nombres fijos.
Hola DAvid,
Pues si, aunque lo hice al final de otra manera, es decir, en dos sentencias sql, te comento que tienes razón, al parecer, me da problemas con las variables.
Pero siempre me ha funcionado así, no sé será que a la hora de relacionar es más delicado.
Gracias por tu respuesta de todos modos me ha servido de ayuda.
Un saludo,
Beatriz

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas