插入和显示数据库中的图片(处理二进制数据)
来源:互联网 发布:杰视帮和凤凰美工 编辑:程序博客网 时间:2024/06/06 08:40
7.5.4 插入和显示数据库中的图片(处理二进制数据)
数据库应用程序,特别是基于Web的数据库应用程序,常常会涉及到图片信息的存储和显示。通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,然后在PHP中查询数据库获得文件路径并在HTML文件中引用。
但是,如果我们想动态的显示图片,上述方法就不能满足需要了。因此必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。
在实际操作中,可以利用PHP将图片插入到数据库中,在数据库中,图片是以二进制格式存储的。随后你也可以使用PHP将图片数据读出来并显示在网页上。
使用HTML表单可以将客户端的图片文件作为请求传递给服务端,PHP可以读取请求中的上载文件数据,并将数据保存在数据库中。
1.将图片插入数据库
下面我们就来看一个范例,了解怎样使用表单提交图片文件,并保存到数据库中。这个范例有两个文件组成。
upload.htm
这个网页包含一个表单,用于提交图片文件,它的代码如下:
代码清单7-6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>提交表单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
</head>
<body>
<form action="insertPic.php" method="post" enctype="
multipart/form-data" name="mainForm" id="mainForm">
<input type="file" name="myFile" />
<br />
<input type="submit" name="Submit" value="Submit"/>
</form>
</body>
</html>
保存到Web根目录下,在浏览器中请求,可以看到如图7-33所示的效果:
图7-33 文件上传表单insertPic.php
这个文件用来将提交的文件数据保存到数据库中,代码如下:
代码清单7-7
<?php
//由于上传过来的图片被保存在一个临时文件中,所以
//我们仅需要读取该文件就可以获取传过来的图片
$fp = fopen($_FILES["myFile"]["tmp_name"],"rb");
$buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));
//创建一个PDO对象
$dbh = new PDO("mysql:host=localhost;port=
3306;dbname=myDatabase", "root", "verysecret");
//执行插入操作并将结果保存在一个变量中
$result = $dbh->query("INSERT INTO employees
(firstName,lastName,EmpType,age,picture) VALUES
('myFirst','myLast','myEmpType',50,'$buf')");
//获取影响的行数
if ($result->rowCount() >0) {
echo("数据已插入。");
} else {
echo("不能执行插入操作。");
}
//显式的关闭PDO连接
$dbh = NULL;
?>
将这个文件也保存到Web根目录下。
测试
现在我们可以测试一下功能,在图7-33中显示的网页上,我们使用"浏览"按钮选择一个图片文件,然后单击"Submit"按钮,这就会打开insertPic.php文件执行,如果中间没有出错,那么就算执行成功了。
关于insertPic.php文件的基本工作原理我们现在是清楚的,但是对于如何分离出提交表单中的文件数据可能还不清楚,不过没关系,我们将在后面的章节再详细介绍如何处理文件上载。
2.显示数据库中的图片数据
在将图片保存到数据库中后,我们就可以读取它并显示出来,也可以将它保存为文件。下面我们就来看怎样显示数据库中保存的图片数据。
我们新建一个PHP文件,命名为showPic.php,编写代码如下:
代码清单7-8
<?php
//创建一个PDO对象
$dbh = new PDO("mysql:host=localhost;port=3306;
dbname=myDatabase", "root", "verysecret");
//设置字符编码
$dbh->exec("SET CHARACTER SET gb2312");
//执行查询并将结果保存在一个变量中
$result = $dbh->query("SELECT * FROM employees
WHERE firstName = 'myFirst'");
//获取第一行数据
$row = $result->fetch();
//写出数据记录,首先查看是否存在记录
if(!empty($row)){
header("Content-type: image/JPEG",true);
echo($row["picture"]);
}
//显式的关闭PDO连接
$dbh = NULL;
?>
将这个文件也保存到Web根目录下,然后在浏览器中请求,就会得到如图7-34所示的效果(图中显示的图片是我们提交的图片):
图7-34 显示数据库中的图片数据
http://book.51cto.com/art/200809/89421.htm
- 插入和显示数据库中的图片(处理二进制数据)
- 读取并显示数据库中的二进制图片(一张和一组)
- winform直接显示二进制数据中的图片
- winform直接显示二进制数据中的图片
- winform直接显示二进制数据中的图片
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 上传图片以二进制插入到数据库,且读取显示
- 图片的二进制数据库存储和显示
- 图片的二进制数据库存储和显示
- c# 将图片的二进制数据插入到数据库中
- C#从数据库中读取二进制数据,并显示图片
- 将数据库 二进制流 图片数据 显示出来
- 解决虚拟机linux下鼠标不能动
- 判断用户是否存在不存在添加存在返回一个值
- Hibernate读写MySQL数据库
- C++基础(三) 控制结构
- 自己搞了个J2ME的俄罗斯方块玩玩
- 插入和显示数据库中的图片(处理二进制数据)
- Visual studio 2005如何实现源码管理
- auto_ptr 类
- Ajax, Sys.Debug 为空或不是对象解决方法.
- 英特尔在台设Moblin技术发展中心 研发下一代手机上网
- EXT之Tab and Layout
- iptables高级应用实例(转)
- web 打开pdf的方法总结
- linux 系统管理问答-自我总结