php插入和显示数据库中的图片(处理二进制数据)
插入和显示数据库中的图片(处理二进制数据)
数据库应用程序,特别是基于Web的数据库应用程序,常常会涉及到图片信息的存储和显示。通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,然后在PHP中查询数据库获得文件路径并在HTML文件中引用。
但是,如果我们想动态的显示图片,上述方法就不能满足需要了。因此必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。php中header是什么意思
在实际操作中,可以利用PHP将图片插入到数据库中,在数据库中,图片是以二进制格式存储的。随后你也可以使用PHP将图片数据读出来并显示在网页上。
使用HTML表单可以将客户端的图片文件作为请求传递给服务端,PHP可以读取请求中的上载文件数据,并将数据保存在数据库中。
1.将图片插入数据库
下面我们就来看一个范例,了解怎样使用表单提交图片文件,并保存到数据库中。这个范例有两个文件组成。
upload.htm
这个网页包含一个表单,用于提交图片文件,它的代码如下:
代码清单7-6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。