http://blog.sina.com.cn/s/blog_6f7ef65401018ns9.html
php将图片以二进制保存到mysql数据库并显示
(2012-10-20 14:22:27)
一.存储图片的数据表结构:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
--
--
表的结构
`image`
--
CREATE
TABLE
IF
NOT EXISTS `image` ( `id`
int
(
3
) NOT
NULL
AUTO_INCREMENT, `name` varchar(
100
) CHARACTER SET utf8 NOT
NULL
, `pic` blob NOT
NULL
, `type` varchar(
50
) CHARACTER SET utf8 NOT
NULL
, `date` datetime NOT
NULL
, PRIMARY KEY (`id`) ) ENGINE=InnoDB
DEFAULT
CHARSET=latin1 AUTO_INCREMENT=
1
; -- -- 转存表中的数据 `image` --
二.php将图片以二进制保存到mysql数据库中:
(1)连接数据库文件:conn.php:
PHP Code
1
2
3
4
5
6
<?php
$conn
=
mysql_connect(
'localhost'
,
'root'
,
''
); mysql_select_db(
'study'
, $conn); mysql_query(
"SET NAMES UTF-8"
); ?>
(2)图片上传并以二进制保存到数据库文件:upload.php
PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?php
include
(
'./conn.php'
);
if
(
$_POST
[
'submit'
]) {
if
(
$_FILES
[
'image'
][
'size'
]) { $names =
$_FILES
[
'image'
][
'name'
]; $arr = explode(
'.'
, $names); $name = $arr[
0
];
//图片名称
$date = date(
'Y-m-d H:i:s'
);
//上传日期
$fp = fopen(
$_FILES
[
'image'
][
'tmp_name'
],
'rb'
); $type =
$_FILES
[
'image'
][
'type'
];
if
(!$fp) { showInfo(
'读取图片失败!'
); }
else
{ $image = addslashes(fread($fp, filesize(
$_FILES
[
'image'
][
'tmp_name'
])));
if
($image) { $q =
"insert into image (name, pic, type, date) values ('$name','$image','$type','$date')"
; $result = mysql_query($q);
if
($result) { showInfo(
'上传成功!'
); }
else
{ showInfo(
'上传失败!'
); } }
else
{ showInfo(
'请选择要上传的文件!'
); } } }
else
{ showInfo(
'请选择要上传的文件!'
); } }
function
showInfo($info) {
echo
"<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"
;
echo
"<meta http-equiv='refresh' content='1;url=index.php'>"
;
echo
"</head>"
;
echo
"<body>"
. $info .
"……</body>"
;
echo
"</html>"
; } ?>
三.从数据库中读取以二进制保存的图片并显示:image.php
PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
include
(
'./conn.php'
); $id =
$_GET
[
'id'
]; $sql =
"select * from image where id='$id'"
; $result = mysql_query($sql, $conn);
if
(!$result)
die
(
"读取图片失败!"
); $num = mysql_num_rows($result);
if
($num <
1
)
die
(
"暂无图片"
); $data = mysql_result($result,
0
,
'pic'
); $type = mysql_result($result,
0
,
'type'
); mysql_close($id); Header(
"Content-type: $type"
);
echo
$data; ?>
四.上传并显示图片的页面:index.php
PHP Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
include
(
'./conn.php'
); ?> <!DOCTYPE html
PUBLIC
"-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
> <html xmlns=
"http://www.w3.org/1999/xhtml"
lang=
"en_US"
xml:lang=
"en_US"
> <!-- * Created on 2012-10-20 * * To change the template
for
this generated file go to * Window - Preferences - PHPeclipse - PHP - Code Templates --> <head> <meta http-equive=
"Content-Type"
content=text/html charset=utf-8> <title> </title> </head> <body> <form method=
'post'
action=
'./upload.php'
enctype=
"multipart/form-data"
> <input type=
"file"
name=
"image"
/> <input type=
"submit"
name=
"submit"
value=
"上传"
/> </form> <!-----------显示图片---------------------> <table> <?php $ret = mysql_query(
'select * from image order by id desc'
);
if
($ret) {
while
($row = mysql_fetch_array($ret)) { ?> <tr> <td style=
'width:170px;'
> <img src=
"image.php?id=<?php
echo
$row[id]; ?>
" width="
170
" height="
150
" border="
0
">
<div style=
'text-align:center;'
><?php
echo
$row[
'name'
]; ?></div> <?php
echo
$row[
'date'
]; ?> </td> </tr> <?php } } ?> </table> <!-----------/显示图片---------------------> </body> </html>
http://flydru.blog.163.com/blog/static/1899361462009891045240/
PHP、MySQL存储显示图片
2009-09-09 10:45:24 | 分类: PHP | 举报 | 字号 订阅
设置数据库 MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。 CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
编写上传脚本 关于如何实现文件的上传,我们在这里就不再介绍了。现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。
<? php
If($Picture != "none")
{
$PSize = filesize($Picture);
$mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
mysql_query("INSERT INTO Images (Image) VALUES '($mysqlPicture')") or die("Can't Perform Query");
}
else
{
echo"You did not upload any picture";
}
?>
这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。
下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture != "none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。
显示图片 在知道了如何将图片存入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。
因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。
为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性。
第一个文件的简单形式可以如下:
<HTML>
<BODY>
<?php
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Can't Perform Query");
While($row=mysql_fetch_object($result))
{
echo "<IMG SRC=\"Second.php3? PicNum=$row->PicNum\">";
}
?>
</BODY>
</HTML>
当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。
Second.php3文件如下:
<?php
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Can't perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->Image;
?>
到此,我们就介绍完了使用PHP和MySQL保存和显示图片的全过程。文中所举得都是一些最简单的实例,读者可以根据自己的实际需要加入其它一些功能,使整个程序更加完善。