php - 将图像保存到 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 数据库带来不必要的负担?你能描述一个简单的例子吗?谢谢你。
解决方案
将图像直接保存在数据库中很容易会炸毁数据库的大小。是否要执行此操作可能取决于要保存在数据库中的图像数量,以及这些图像的预期大小。但是,我通常建议不要使用这种方法。
将图像作为 BLOB 直接保存在数据库中的另一种方法是将图像的路径存储在数据库中。映像本身存储在服务器的磁盘(HDD / SSD)上。您可以使用 PHP 的move_uploaded_file()方法来处理这个问题,因为文件路径$_FILES['img']['tmp_name']
只是一个临时路径。这意味着:如果您只是保存路径,$_FILES['img']['tmp_name']
以后尝试从该路径检索文件时可能会遇到问题。
这种方法通常在数据库中使用比存储完整图像少得多的数据(除非您的图像非常小)。当然,您的 PHP 脚本将不得不从磁盘读取图像文件。