You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将图片以BLOB格式而非文件路径存入数据库(同ID下)

解决将图片内容以BLOB格式存入数据库的问题

你猜的没错!问题确实出在你用了$_FILES['image1']['tmp_name']——这个值只是服务器上临时文件的路径,而不是图片文件的二进制内容。要把图片以BLOB格式存入数据库,你需要读取这个临时文件里的实际数据,而不是存路径。

需要修改的几个关键点:

  • 不需要执行move_uploaded_file(除非你同时需要把图片保存到服务器文件系统),我们要的是文件内容,不是移动后的路径
  • 使用file_get_contents()函数读取临时文件的二进制数据,这才是要存入BLOB字段的内容
  • 确保数据库里的image1-image4字段类型是BLOB(比如MEDIUMBLOB,根据图片大小选择合适的类型)

修改后的代码示例

替换你原来的循环和变量赋值部分:

$prijs = $_POST['prijs'];
$naam = $_POST['fname'];
$beschrijving = $_POST['desc'];
$maat1 = $_POST['maat1'];
$maat2 = $_POST['maat2'];
$maat3 = $_POST['maat3'];
$maat4 = $_POST['maat4'];

$aMyUploads = array();
foreach ($_FILES as $aFile) {
    if(0 === $aFile['error']){
        // 读取临时文件的二进制内容,而不是存路径
        $fileContent = file_get_contents($aFile['tmp_name']);
        $aMyUploads[] = $fileContent ?: '';
    } else {
        $aMyUploads[] = '';
    }
}

$stmt = $conn->prepare("INSERT INTO `producten` (naam, beschrijving, prijs, maat1, maat2, maat3, maat4, image1, image2, image3, image4) VALUES (:naam, :beschrijving, :prijs, :maat1, :maat2, :maat3, :maat4, :image1, :image2, :image3, :image4)");
$stmt->execute(array(":naam"=>$naam, ":beschrijving"=>$beschrijving, ":prijs"=>$prijs, ":maat1"=>$maat1, ":maat2"=>$maat2, ":maat3"=>$maat3, ":maat4"=>$maat4, ":image1"=>$aMyUploads[0], ":image2"=>$aMyUploads[1], ":image3"=>$aMyUploads[2], ":image4"=>$aMyUploads[3]));

额外提醒

  • 如果图片比较大,建议把数据库字段类型设为MEDIUMBLOBLONGBLOB,避免内容被截断
  • 存BLOB到数据库虽然可行,但通常更推荐的做法是把图片保存到服务器文件系统,只在数据库里存文件路径——这样数据库体积不会过大,读取效率也更高,你可以根据自己的需求选择。

内容的提问来源于stack exchange,提问作者thomascoolminecraftplayer555

火山引擎 最新活动