php - 在 PHP 上执行 mysql 级联删除

标签 php mysql

我正在帮助我的 friend 做一些数据库管理工作。基本上他有 2 个数据库,一个叫城市,一个叫运费。每个表都显示在网页中,每条记录旁边都有编辑和删除按钮。所以他可以通过网络删除数据库中的数据。

交易是,我想在这个 mysql 数据库上进行级联删除,这样每次我在城市数据库中删除一行时,运费数据库中具有相同 city_ID 的相应行也会被删除。我尝试做一些 mysql 查询组合,但没有用。这是我得到的

require_once('../../model/city.php');
    if(isset($_POST['id'])){
        //edit or remove
        $id = $_POST['id'];
        $dbo = City::get_by_id($id);
        if($_POST['action'] == 'remove'){
            //remove
            //$dbo->delete();
            mysql_query("DELETE city.*, shipping_rate_loc.* FROM city c,    shipping_rate_loc s WHERE c.ID_city = s.ID_city");
            echo "Data is removed.";
        }

如你所见,我只是把那个mysql_query放在他之前的

$dbo->delete();

成功删除城市的代码,但未删除其相关运费。

我在 PHP 中使用 mysql 是相当新手,所以任何人都可以帮我指出我的错误在哪里吗?非常感谢:)

更新: 我已经从答案中尝试了一些解决方案。他们都没有工作。即使我简化了事情。这让我想知道,在将 php 连接到数据库方面是否有任何错误?

最佳答案

最好的方法是修改数据库设置,将 on delete cascade 包含到 shipping_rate_loc 表的外键中,例如

create table city
(
    id    integer,
    name  varchar,
    ...
    primary key (id)
);

create table shipping_rate_loc
(
    id          integer,
    city_from   integer,
    city_to     integer,
    ...
    foreign key (city_from) references city(id) on delete cascade,
    foreign key (city_to) references city(id) on delete cascade
);

这样,当您从 city 表中删除一条记录时

DELETE FROM city WHERE id = myid

shipping_rate_loc 中该城市位于 city_fromcity_to 列中的所有记录将被数据库自动删除 - 无需您用 PHP 做任何事情。

关于php - 在 PHP 上执行 mysql 级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9570098/

相关文章:

php - 将图像上传到数据库和文件夹中

重新排序数组的PHP函数

php - 在mysql中拆分字符串

mysql - 搜索区间 "cross"行

php - PHP中如何解析字符

php - Mysqli错误显示源文件

php - 在 PHP 中,将字符串与关键字列表进行匹配的最有效方法是什么?

php - 查看不返回数组集。拉维尔

mysql - 在 Windows 服务器计算机上访问 MYSQL DB 时,Windows 7 PC 非常慢

mysql - PhpMyAdmin 显示字符不正确