级联删除数据库记录到删除相关图像文件
Cascade deletion of database record to deletion of associated image file
我最近发现了外键和删除与 InnoDB 级联的奇迹,我喜欢它。它帮助我轻松删除复杂的数据结构,而不用担心留下垃圾。
我目前正在通过以下方式为产品数据库存储图像(就像您在网上商店中存储的那样):
我的 products
table 是您所期望的,它有一个 id
主列。
我的 product_images
table 有一个 product_id
列,其中包含 products.id
列的外键,以及一个存储图像文件名的 varchar 类型的 image
列。
文件名是通过计算图像的 SHA1 哈希值创建的,然后存储在以哈希值的前 2 个字符命名的文件夹中:
61/6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg
。在数据库中,只存储了6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg
。
现在,如果我要从数据库中删除产品,级联 DELETE 规则将删除 product_images
table 中的记录,但会将该文件保留在我的服务器上。
有没有办法在删除 product_images
table 中的记录时自动删除图像文件,是特定的还是级联的?也许 link 某种删除操作的触发器或例程?
您将使用以下代码删除特定文件。
注意:您的文件名($filName)将来自您的查询。
$filName;
$dirName = substr($filName, 0, 2);
chown($filName,465);
unlink("../".dirName."/" . $filName);
mysql 中没有内置的本机功能来执行此操作。如果有的话,将它变成特性蠕变和成熟的高级编程语言就没有尽头了。膨胀软件,远离其核心竞争力。
人们使用了以 C 语言编译的 UDF 库,这些库作为目标文件或编译到服务器源代码中集成到 mysql 中。请参阅 Adding New Functions to MySQL, and UDF Repository for MySQL 部分。它变得像一个科学博览会项目,在你让它运行一次之后,你可能不想将它推广到其他服务器上。
那么你有什么选择?安全的赌注总是写入另一个 table (在级联删除层次结构之外) directory/filename 组合。并让另一个迷你系统为您打扫房间。例如,一天两次,使用 Java 或 c# 或 python(任何语言)。这些环境具有数据库库和强大的文件操作。无论如何,这样会容易得多。
我做这些类型的事情是为了扩展 mysql 相关活动的功能,这些活动主要是基于文件或禁止在存储过程和 .
内部调用
在将图像插入数据库时更改其名称以与其产品链接
或者它是类别。
删除类别时搜索名称涉及猫 ID 的图片然后取消链接
此代码可以提供帮助
foreach(glob(IMG_PATH.'cat_'.$_POST['id'].'*.*') as $file)
{
if(is_file($file))
{
@unlink($file);
}
}
我最近发现了外键和删除与 InnoDB 级联的奇迹,我喜欢它。它帮助我轻松删除复杂的数据结构,而不用担心留下垃圾。
我目前正在通过以下方式为产品数据库存储图像(就像您在网上商店中存储的那样):
我的 products
table 是您所期望的,它有一个 id
主列。
我的 product_images
table 有一个 product_id
列,其中包含 products.id
列的外键,以及一个存储图像文件名的 varchar 类型的 image
列。
文件名是通过计算图像的 SHA1 哈希值创建的,然后存储在以哈希值的前 2 个字符命名的文件夹中:
61/6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg
。在数据库中,只存储了6153A6FA0E4880D9B8D0BE4720F78E895265D0A9.jpg
。
现在,如果我要从数据库中删除产品,级联 DELETE 规则将删除 product_images
table 中的记录,但会将该文件保留在我的服务器上。
有没有办法在删除 product_images
table 中的记录时自动删除图像文件,是特定的还是级联的?也许 link 某种删除操作的触发器或例程?
您将使用以下代码删除特定文件。
注意:您的文件名($filName)将来自您的查询。
$filName;
$dirName = substr($filName, 0, 2);
chown($filName,465);
unlink("../".dirName."/" . $filName);
mysql 中没有内置的本机功能来执行此操作。如果有的话,将它变成特性蠕变和成熟的高级编程语言就没有尽头了。膨胀软件,远离其核心竞争力。
人们使用了以 C 语言编译的 UDF 库,这些库作为目标文件或编译到服务器源代码中集成到 mysql 中。请参阅 Adding New Functions to MySQL, and UDF Repository for MySQL 部分。它变得像一个科学博览会项目,在你让它运行一次之后,你可能不想将它推广到其他服务器上。
那么你有什么选择?安全的赌注总是写入另一个 table (在级联删除层次结构之外) directory/filename 组合。并让另一个迷你系统为您打扫房间。例如,一天两次,使用 Java 或 c# 或 python(任何语言)。这些环境具有数据库库和强大的文件操作。无论如何,这样会容易得多。
我做这些类型的事情是为了扩展 mysql 相关活动的功能,这些活动主要是基于文件或禁止在存储过程和
在将图像插入数据库时更改其名称以与其产品链接 或者它是类别。 删除类别时搜索名称涉及猫 ID 的图片然后取消链接
此代码可以提供帮助
foreach(glob(IMG_PATH.'cat_'.$_POST['id'].'*.*') as $file)
{
if(is_file($file))
{
@unlink($file);
}
}