为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用PHP从MySQL数据库存储和检索图像?

如何使用PHP从MySQL数据库存储和检索图像?

海绵宝宝撒 2019-06-26 13:39:31
如何使用PHP从MySQL数据库存储和检索图像?如何在MySQL中插入图像,然后使用PHP检索图像?我在这两个领域的经验有限,我可以使用一些代码来让我开始弄清楚这一点。
查看完整描述

3 回答

?
蓝山帝景

TA贡献1843条经验 获得超7个赞

首先,创建一个MySQL表来存储图像,例如:

create table testblob (
    image_id        tinyint(3)  not null default '0',
    image_type      varchar(25) not null default '',
    image           blob        not null,
    image_size      varchar(25) not null default '',
    image_ctgy      varchar(25) not null default '',
    image_name      varchar(50) not null default '');

然后,您可以将图像写入数据库,如下所示:

/***
 * All of the below MySQL_ commands can be easily
 * translated to MySQLi_ with the additions as commented
 ***/ $imgData = file_get_contents($filename);$size = getimagesize($filename);mysql_connect("localhost", "$username", "$password");mysql_select_db ("$dbname");// mysqli // $link = mysqli_connect("localhost", $username, $password,$dbname); $sql = sprintf("INSERT INTO testblob
    (image_type, image, image_size, image_name)
    VALUES
    ('%s', '%s', '%d', '%s')",
    /***
     * For all mysqli_ functions below, the syntax is:
     * mysqli_whartever($link, $functionContents); 
     ***/
    mysql_real_escape_string($size['mime']),
    mysql_real_escape_string($imgData),
    $size[3],
    mysql_real_escape_string($_FILES['userfile']['name'])
    );mysql_query($sql);

您可以在以下网页中显示数据库中的图像:

$link = mysql_connect("localhost", "username", "password");mysql_select_db("testblob");$sql = "SELECT image FROM testblob WHERE image_id=0";$result = mysql_query("$sql");header("Content-type: image/jpeg");echo mysql_result($result, 0);mysql_close($link);


查看完整回答
反对 回复 2019-06-26
?
LEATH

TA贡献1936条经验 获得超6个赞

不要将图像存储在数据库中,而是将它们存储在磁盘中的文件夹中,并将其存储在数据库中。


查看完整回答
反对 回复 2019-06-26
?
aluckdog

TA贡献1847条经验 获得超7个赞

请注意,从DB提供的映像通常是非常多的。比从磁盘为他们服务要慢。

您将启动一个PHP进程,打开一个DB连接,让DB像文件系统一样从同一个磁盘和RAM读取图像数据,通过几个套接字和缓冲区传输它,然后通过PHP进行推送,这在默认情况下使它不可缓存,并增加了块HTTP编码的开销。

OTOH现代Web服务器只需很少经过优化的内核调用(内存映射文件和传递给TCP堆栈的内存区域)就可以提供映像,这样它们甚至不会复制内存,而且几乎没有开销。

这与在一台机器上并行处理20或2000张图像是有区别的。

所以别这么做除非您绝对需要事务完整性(实际上,这甚至可以通过DB中的图像元数据和文件系统清理例程来完成),并且知道如何改进PHP对HTTP的处理,使之适合于图像。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 505 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信