php 我可以在MySQL中存储图像吗[duplicate]

ve7v8dk2  于 2023-01-19  发布在  PHP
关注(0)|答案(4)|浏览(159)
    • 此问题在此处已有答案**:

11年前关闭了。

    • 可能重复:**

Images in MySQL
Storing images in MySQL
我正在尝试开发一个网站,用户可以上传他们的图片作为注册的一部分。我希望每张图片都有一个用PHP创建的拇指(这并不困难)。我希望将拇指(因为它们非常小)保存在数据库中,我使用MySQL。(我不希望将拇指作为物理文件保存在驱动器上。)
MySQL允许保存和检索图像数据吗?我该怎么做?如果它不支持图像数据,有没有免费的数据库?如果能提供链接,我会很高兴。
谢谢。

lc8prwob

lc8prwob1#

是的,你可以在数据库中存储图像,但在我看来这是不可取的,这不是一般的做法。
一般做法是将映像存储在文件系统上的目录中,并将对映像的引用存储在数据库中,例如映像的路径、映像名称等。或者,您甚至可以将映像存储在内容交付网络(CDN)或跨越某个巨大物理地域的许多主机上,并将访问这些资源的引用存储在数据库中。
图像可能会变得很大,超过1MB。因此,在数据库中存储图像可能会给数据库以及数据库和Web服务器之间的网络带来不必要的负载(如果它们位于不同的主机上)。
我曾在初创公司、中型公司和大型科技公司工作过,员工超过40万人。在我13年的专业经验中,我从未见过有人在数据库中存储图像。我这样说是为了支持这一说法,这是一种罕见的做法。

yh2wf1be

yh2wf1be2#

你需要保存为一个blob,在mysql中的LONGBLOB数据类型可以工作。
例如:

CREATE TABLE `test`.`pic` (
    `idpic` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT
        PRIMARY KEY,
    `caption` VARCHAR(45) NOT NULL,
    `img` LONGBLOB NOT NULL
)

正如其他人所说,这是一个糟糕的做法,但它可以做到。但不确定这段代码是否可以很好地伸缩。

xtfmy6hx

xtfmy6hx3#

你可以在MySQL中以blob的形式存储图像,但是,这有几个问题:

  • 图像可能更难处理:必须先从数据库中检索它们,然后才能执行批量操作。
  • 除了极少数情况下整个数据库都存储在RAM中,MySQL数据库最终都存储在磁盘上,这意味着您的DB映像被转换为blob,插入到数据库中,然后存储在磁盘上;您可以通过简单地将它们存储在磁盘上来保存大量开销。

相反,请考虑更新表以添加image_path字段。例如:

ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)

然后将图像存储在磁盘上,并使用图像路径更新表。当需要使用图像时,使用指定的路径从磁盘中检索它们。
这种方法的有利的副作用是图像不必存储在盘上;您可以很容易地存储URL而不是图像路径,并从任何连接到Internet的位置检索图像。

qqrboqgw

qqrboqgw4#

您需要将图像作为BLOB存储在数据库中。
您将需要在表中创建一个名为PHOTO的列,并将其设置为mediumblob。
然后你会想从表单中得到它,如下所示:

$data = file_get_contents($_FILES['photo']['tmp_name']);

然后将该列设置为$data中的值。
当然,这是不好的做法,您可能希望使用与用户帐户对应的名称将文件存储在系统上。

相关问题