先删除文件再删除行数据?
Delete the file before deleting the row data?
我想先从上传文件夹中删除文件,然后再从数据库中删除行数据。我使用了下面的代码,但它给出了错误。
错误=> 没有那个文件或目录
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;
}
您需要修正 $path
值才能获得实际路径。在尝试删除文件之前,您可以使用 __DIR__
constant for the same. And, also use 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");
请阅读:Why is SELECT * considered harmful?
使用$_SERVER['DOCUMENT_ROOT']
获取根目录的绝对路径。
$path=$_SERVER['DOCUMENT_ROOT']."/uploads/".$item;
if(file_exists($path)){
unlink($path);
}else{
echo $path; // check path here
}
我想先从上传文件夹中删除文件,然后再从数据库中删除行数据。我使用了下面的代码,但它给出了错误。 错误=> 没有那个文件或目录
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;
}
您需要修正 $path
值才能获得实际路径。在尝试删除文件之前,您可以使用 __DIR__
constant for the same. And, also use 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");
请阅读:Why is SELECT * considered harmful?
使用$_SERVER['DOCUMENT_ROOT']
获取根目录的绝对路径。
$path=$_SERVER['DOCUMENT_ROOT']."/uploads/".$item;
if(file_exists($path)){
unlink($path);
}else{
echo $path; // check path here
}