在删除行数据之前删除文件?

k10s72fa  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(392)

我想先从uploads文件夹中删除文件,然后再从数据库中删除行数据。我使用了下面的代码,但它给出了错误。error=>没有这样的文件或目录

function deleteItem($conn,$product_id)
{
    $stmtgetfile=$conn->prepare("SELECT * FROM tbl_item WHERE product_id=:product_id");
    $stmtgetfile->bindParam('product_id',$product_id);
    $stmtgetfile->execute();
    $row = $stmtgetfile->fetch(PDO::FETCH_ASSOC);
    $item=$row['product_photo'];
    $path="../uploads/".$item;
    unlink($path);
    // $stmtdelete=$conn->prepare("DELETE FROM tbl_item WHERE product_id=:product_id");
    // $stmtdelete->bindParam('product_id',$product_id);
    // if($stmtdelete->execute())
    //     return true;
    // return false;
}
rqenqsqc

rqenqsqc1#

你需要修好这个房间 $path 值以获取实际路径。你可以用 __DIR__ 相同的常数。并且,也使用 file_exists() 函数来检查文件是否确实存在,然后再尝试删除它。数据库中的某些文件路径现在似乎不存在。

$path = __DIR__ . "/../uploads/" . $item;
if (file_exists($path)) {
    unlink($path);
}

另外,如果你只是需要 product_photo 列值,不使用 Select * . 将准备查询语句更改为:

$stmtgetfile=$conn->prepare("SELECT product_photo FROM tbl_item 
                             WHERE product_id=:product_id");

阅读:为什么选择*被认为是有害的?

h7wcgrx3

h7wcgrx32#

使用 $_SERVER['DOCUMENT_ROOT'] 获取根目录的绝对路径。

$path=$_SERVER['DOCUMENT_ROOT']."/uploads/".$item;
if(file_exists($path)){
   unlink($path);
}else{
   echo $path; // check path here
}

相关问题