我们需要保存一个文件或者一张图片或者其他二进制或多媒体文件时,经常选择使用Blob类型!
一 基本使用
Blob就是一种Mysql的数据类型,它是一个二进制大型对象,可以作为大量数据的容器;其实更准确地说Blob是一系列数据类型:
MySQL的四种BLOB类型
类型
大小(单位:字节)
TinyBlob
最大255
Blob
最大65K
MediumBlob
最大16M
LongBlob
最大4G
这四种类型除了允许的最大值不同外,没有其他区别;实际使用中根据需要存入的数据大小定义不同的BLOB类型。
注意:如果你存储的文件过大,数据库的性能会下降很多。
图片的插入:
Php代码
if($Picture!="none") {
$PSize=filesize($Picture);
$mysqlPicture=addslashes(fread(fopen($Picture,"r"),$PSize));
mysql_connect($host,$username,$password)ordie("Unable to connect to SQL server");
@mysql_select_db($db)ordie("Unable to select database");
mysql_query("INSERT INTO Images (Image) VALUES ($mysqlPicture)")ordie("Cant Perform Query");
}else{
echo"You did not upload any picture";
}
?>
图片的读取:
在知道了如何将图插入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。
因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。
为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为标签的SRC属性。
第一个文件的简单形式可以如下:
Php代码
mysql_connect($host,$username,$password)ordie("Unable to connect to SQL server");
@mysql_select_db($db)ordie("Unable to select database");
$result=mysql_query("SELECT * FROM Images")ordie("Cant Perform Query");
While($row=mysql_fetch_object($result)) {
echo "PicNum\">";
}
?>
当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。
Second.php3文件如下:
Php代码
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum")ordie("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo$row->Image;
?>