我正在尝试开发一个网站,用户上传图片作为注册的一部分。我希望每个图像都应该有一个用PHP创建的拇指(这并不困难)。我想在数据库中保存拇指(因为它们非常小),我使用MySQL。 (我不想将拇指保存为驱动器上的物理文件。)
MySQL是否允许保存和检索图像数据,我该如何处理?如果它不支持图像数据,是否有任何免费的数据库呢?如果可以提供链接,我会很高兴
感谢。
答案 0 :(得分:218)
是的,您可以将图像存储在数据库中,但在我看来这是不可取的,这不是一般做法。
一般做法是将图像存储在文件系统上的目录中,并存储对数据库中图像的引用。例如图像的路径,图像名称等。或者,您甚至可以将图像存储在内容传送网络(CDN)或跨越一大片物理区域的众多主机上,并存储引用以访问数据库中的这些资源。
图像可能会变得非常大,大于1MB。因此,将数据存储在数据库中可能会对数据库和数据库与Web服务器之间的网络造成不必要的负担,如果它们位于不同的主机上。
我曾在拥有400,000多名员工的初创公司,中型公司和大型科技公司工作过。在我13年的专业经验中,我从未见过有人将图像存储在数据库中。我这样说是为了支持这种说法,这是一种不常见的做法。
答案 1 :(得分:35)
你需要保存为blob,mysql中的LONGBLOB数据类型才有效。
例如:
CREATE TABLE 'test'.'pic' (
'idpic' INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
'caption' VARCHAR(45) NOT NULL,
'img' LONGBLOB NOT NULL,
PRIMARY KEY ('idpic')
)
正如其他人所说,这是一种不好的做法,但可以做到。但不确定这段代码是否可以很好地扩展。
答案 2 :(得分:11)
您可以将图像存储在MySQL中作为blob。但是,由于以下几个原因,这是有问题的:
相反,请考虑更新表以添加image_path字段。例如:
ALTER TABLE `your_table`
ADD COLUMN `image_path` varchar(1024)
然后将图像存储在磁盘上,并使用图像路径更新表格。需要使用图像时,使用指定的路径从磁盘检索图像。
这种方法的一个有利的副作用是图像不一定存储在磁盘上;您可以轻松存储URL而不是图像路径,并从任何连接互联网的位置检索图像。
答案 3 :(得分:5)
您需要将图像作为BLOB存储在数据库中。
您需要在表格中创建一个名为PHOTO的列,并将其设置为mediumblob。
然后你会想要从表格中得到它:
$data = file_get_contents($_FILES['photo']['tmp_name']);
然后将列设置为$ data中的值。
当然,这是不好的做法,您可能希望将文件存储在系统中,其名称与用户帐户相对应。