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」は、コマンドが誤って書き込まれたことを意味します。
PHP のunlink()
関数を使用してファイルを削除できます ( docs here )。
最初にクエリを実行してファイルの場所を取得し、次に結果をループします。
$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を配列に追加してから、単一のクエリですべての行を削除する方がよいでしょう.
2 つのクエリを実行できます。次のようになります。
SELECT id, relevant_field from my_table WHERE the_condition_for_the_rows_to_delete.
次に、2 番目のクエリ:
DELETE FROM my_table WHERE id IN (the_ids_you_got_with_the_first_select)
その後、最初のクエリの結果に関連付けられたファイルを削除します。