Php Mysqli删除查询

Php Mysqli删除查询,php,mysqli,Php,Mysqli,创建mysqli delete查询时,如何运行PHP代码来删除与已删除信息关联的文件 我知道mysqli::$infected_rows,但它对我没有什么帮助。您可以运行两个查询。这类似于: 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_

创建mysqli delete查询时,如何运行PHP代码来删除与已删除信息关联的文件


我知道mysqli::$infected_rows,但它对我没有什么帮助。

您可以运行两个查询。这类似于:

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添加到一个数组中,然后在一个查询中删除所有行。

下一行删除了所有在“Title”列中包含单词“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”表示命令写得不正确。

这就是为什么要将文件存储在数据库中,而不是路径中。@vascowhite什么意思?RTLM:@vasco:数据库中的文件很少是个好主意。删除查询同时杀死“文件”所带来的微小效率增益不足以弥补它所带来的所有其他麻烦