首页 > 解决方案 > 将图像保存到 MySQL 数据库?是的?或不?

问题描述

我正在尝试使用 PHP 将图像直接存储在 sql 表中。我有一张桌子:

CREATE TABLE `products` (
     `id` INT UNSIGNED AUTO_INCREMENTS PRIMARY KEY,
     `date` DATE,
     `img` LONGBLOB, 
     `path` VARCHAR(255)
);

使用 php 我尝试将图像保存到 mysql 表中。:

<?php 
// snippet of main part of php code
// query string
$query = "INSERT INTO `produkt` (`id`, `date`, `img`, `path`)";
$query .= " VALUES('', date('d.m.Y'), ?, ?)";

// prepare query 
$stmt = $conn->prepare($query);

//  bind  params
$stmt->bind_param("bs", $img, $path);
$img = addslashes(file_get_contents($_FILES['img']['tmp_name']));
$path = $_FILES['img']['tmp_name'];

// execution of the prepared statement
$stmt->execute();

?>

所有数据都进入数据库,除了img不想保存图像的列。我发现这个 sql 数据库图像管理逻辑可能不是一个好主意,我怎样才能尽可能高效地使用 sql 数据库管理图像,而不会给我的 MySQL 数据库带来不必要的负担?你能描述一个简单的例子吗?谢谢你。

标签: phpmysql

解决方案


将图像直接保存在数据库中很容易会炸毁数据库的大小。是否要执行此操作可能取决于要保存在数据库中的图像数量,以及这些图像的预期大小。但是,我通常建议不要使用这种方法。

将图像作为 BLOB 直接保存在数据库中的另一种方法是将图像的路径存储在数据库中。映像本身存储在服务器的磁盘(HDD / SSD)上。您可以使用 PHP 的move_uploaded_file()方法来处理这个问题,因为文件路径$_FILES['img']['tmp_name']只是一个临时路径。这意味着:如果您只是保存路径,$_FILES['img']['tmp_name']以后尝试从该路径检索文件时可能会遇到问题。

这种方法通常在数据库中使用比存储完整图像少得多的数据(除非您的图像非常小)。当然,您的 PHP 脚本将不得不从磁盘读取图像文件。


推荐阅读