Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除文件&;MySQL结果集中的行_Php_Mysql - Fatal编程技术网

Php 删除文件&;MySQL结果集中的行

Php 删除文件&;MySQL结果集中的行,php,mysql,Php,Mysql,我有一个LinuxBox,它可以捕获数据、创建文件,并将有关文件的数据存储在MySQL表中。我需要能够开始有选择地删减这些数据 我计划使用一个php cli脚本,并通过cron每晚运行它 基本前提是选择符合删除条件的行,从匹配行中删除文件,然后删除行。路径/文件名存储在行中 我发现以下查询需要安全地选择,然后删除行,但我还需要从文件系统中删除结果中的文件: SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSAC

我有一个LinuxBox,它可以捕获数据、创建文件,并将有关文件的数据存储在MySQL表中。我需要能够开始有选择地删减这些数据

我计划使用一个php cli脚本,并通过cron每晚运行它

基本前提是选择符合删除条件的行,从匹配行中删除文件,然后删除行。路径/文件名存储在行中

我发现以下查询需要安全地选择,然后删除行,但我还需要从文件系统中删除结果中的文件:

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。我真的看不出有什么问题。事务确保它将选择然后删除该行,并
取消链接()函数不起作用。你怎么回事啊?