创建 mysqli 删除查询时,如何运行 PHP 代码来删除与已删除信息关联的文件?
我知道,mysqli::$affected_rows
但它并没有真正帮助我。
以下行删除了“标题”列中包含“Cron”一词的所有行。
mysqli_query($con,"delete from `foexstco_rr`.`Timings` where `Title`='Cron'");
下一行删除了所有内容。
mysqli_query($con,"delete from `foexstco_rr`.`Timings`");
此行删除了包含 3 个条件的行。请注意,** 和 ** 必须将每个条件分开。
mysqli_query($con,"delete from `foexstco_rr`.`Timings` where `Number`='77' and `Title`='Cron' and `Cols`='1'");
如果您打印了 MySqli 响应,“1”将意味着该命令已被执行,但并不一定意味着任何行已被删除。“0”表示命令写入错误。
您可以运行两个查询。那将是:
SELECT id, relevant_field from my_table WHERE the_condition_for_the_rows_to_delete.
然后是第二个查询:
DELETE FROM my_table WHERE id IN (the_ids_you_got_with_the_first_select)
之后,您将删除与第一个查询结果关联的文件。
您可以使用 PHP 的unlink()
函数来删除文件(此处的文档)。
首先进行查询以获取文件位置,然后通过结果循环运行:
$mysqli = new mysqli("localhost", "user", "password", "database");
$results = $mysqli->query("SELECT id,file_path FROM table WHERE whatever")->fetch_assoc();
foreach($results as $result) {
unlink($row['file_path']);
$mysqli->query("DELETE FROM table WHERE id = " . $row['id']);
}
确保清理任何用户提交的输入以避免 SQL 注入。
编辑:这不是最有效的方法——为了简化代码,我已经演示了这种方式,最好将 id 添加到数组中,然后在单个查询中删除所有行。