用PHP和MySQL保存和输出图片


Posted in PHP onOctober 09, 2006

设置数据库

我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。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。
<?
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("Cant Perform Query");
}else {
echo"You did not upload any picture";
}
?>

这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。

下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture != "none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。
显示图片

在知道了如何将图? 入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。
因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。
为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性。
第一个文件的简单形式可以如下:
<HTML> <BODY>
<?
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("Cant 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文件如下:
<?
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->Image;
?>

到此,我们就介绍完了使用PHP和MySQL保存和显示图片的全过程。文中所举得都是一些最简单的实例,读者可以根据自己的实际需要加入其它一些功能,使整个程序更加完善。 

PHP 相关文章推荐
php下几个常用的去空、分组、调试数组函数
Feb 22 PHP
完美解决PHP中文乱码
Nov 26 PHP
PHP中冒号、endif、endwhile、endfor使用介绍
Apr 28 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
迁移PHP版本到PHP7
Feb 06 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 PHP
帝国cms常用标签汇总
Jul 06 PHP
PHP使用socket发送HTTP请求的方法
Feb 14 PHP
PHP入门教程之PHP操作MySQL的方法分析
Sep 11 PHP
PHP实现权限管理功能示例
Sep 22 PHP
thinkPHP框架中layer.js的封装与使用方法示例
Jan 18 PHP
PHP生成带有雪花背景的验证码
Oct 09 #PHP
一个可查询所有表的“通用”查询分页类
Oct 09 #PHP
Get或Post提交值的非法数据处理
Oct 09 #PHP
用Socket发送电子邮件
Oct 09 #PHP
编写自己的php扩展函数
Oct 09 #PHP
PHP输出控制功能在简繁体转换中的应用
Oct 09 #PHP
PHP 中执行系统外部命令
Oct 09 #PHP
You might like
简单的页面缓冲技术
2006/10/09 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
php判断linux下程序问题实例
2015/07/09 PHP
php无限级分类实现方法分析
2016/10/19 PHP
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
jquery二级目录选中当前页的css样式
2016/12/08 Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
2016/12/14 Javascript
微信小程序本地缓存数据增删改查实例详解
2017/05/24 Javascript
Vue-Access-Control 前端用户权限控制解决方案
2017/12/01 Javascript
Vue2实时监听表单变化的示例讲解
2018/08/30 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
[00:02]DOTA2新版本使用PA至宝后暴击展示
2014/11/19 DOTA
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
Python实现两个list求交集,并集,差集的方法示例
2018/08/02 Python
python实现FTP循环上传文件
2020/03/20 Python
Farah官方网站:男士服装及配件
2019/11/01 全球购物
几个判断型的面试题
2012/07/03 面试题
应届毕业生专业个人求职自荐信格式
2013/11/20 职场文书
学术会议欢迎词
2014/01/09 职场文书
二手房买卖协议书
2014/04/10 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
先进个人事迹材料范文
2014/12/30 职场文书
保研推荐信范文
2015/03/25 职场文书
小学副班长竞选稿
2015/11/21 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers
Nginx报404错误的详细解决方法
2022/07/23 Servers