小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

插入和显示数据库中的图片(处理二进制数据)

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

posted on 2009-03-05 17:27  王峰炬  阅读(248)  评论(0编辑  收藏  举报

导航