Php 删除文件&;MySQL结果集中的行
我有一个LinuxBox,它可以捕获数据、创建文件,并将有关文件的数据存储在MySQL表中。我需要能够开始有选择地删减这些数据 我计划使用一个php cli脚本,并通过cron每晚运行它 基本前提是选择符合删除条件的行,从匹配行中删除文件,然后删除行。路径/文件名存储在行中 我发现以下查询需要安全地选择,然后删除行,但我还需要从文件系统中删除结果中的文件:Php 删除文件&;MySQL结果集中的行,php,mysql,Php,Mysql,我有一个LinuxBox,它可以捕获数据、创建文件,并将有关文件的数据存储在MySQL表中。我需要能够开始有选择地删减这些数据 我计划使用一个php cli脚本,并通过cron每晚运行它 基本前提是选择符合删除条件的行,从匹配行中删除文件,然后删除行。路径/文件名存储在行中 我发现以下查询需要安全地选择,然后删除行,但我还需要从文件系统中删除结果中的文件: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSAC
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT foo FROM bar WHERE wee = 'yahoo!';
DELETE FROM bar WHERE wee = 'yahoo!';
COMMIT;
我知道如何使用php的unlink()函数删除文件。我只是不知道如何保留结果集,迭代删除文件,然后从表中删除结果集行。。。没有一个大的丑陋的黑客写入一个临时文本文件或什么
任何帮助都将不胜感激。谢谢
编辑:PHP5.3.6,MySQL 5.0.77如果您只是启动一个删除查询,我认为您不需要事务
<?php
$pdo::prepare("SELECT [...]");
foreach($result as $pathname) {
unlink($pathname);
if (/*everything went good*/)
$pdo::prepare("DELETE [...]");
}
?>
我想你实际上没有问题。您可以选择所有记录并对其进行迭代。执行查询后,您可以迭代结果集中的每个记录,即使您使用第二个查询删除它们。迭代结果集时,结果集保存在内存中 所以,只需查询(在一个查询中,如果可能的话)所有要删除的记录。在每次迭代中,删除文件并删除该记录 唯一的“问题”是,文件系统不是在与SQL语句相同的事务中处理的,因此,如果在删除记录时出错,文件可能仍会被删除,反之亦然
因为我认为使用文件的应用程序应该总是显式地检查文件是否存在,所以最好先清理文件。如果先删除该文件,请检查是否已删除该文件,然后再删除该记录,则可以确保始终删除该文件。如果删除记录时发生错误,您始终可以再次查询以重试。如果先删除记录,可能会得到意外未删除的文件树,不必要地占用磁盘空间。Ehm。我真的看不出有什么问题。事务确保它将选择然后删除该行,并
取消链接()代码>函数不起作用。你怎么回事啊?