用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 编程请选择正确的文本编辑软件
Dec 21 PHP
在smarty模板中使用PHP函数的方法
Apr 23 PHP
单台服务器的PHP进程之间实现共享内存的方法
Jun 13 PHP
mac环境中使用brew安装php5.5.15
Aug 18 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
php实现文章置顶功能的方法
Oct 20 PHP
php实现的中文分词类完整实例
Feb 06 PHP
php实现的二分查找算法示例
Jun 20 PHP
php利用云片网实现短信验证码功能的示例代码
Nov 18 PHP
原生php实现excel文件读写的方法分析
Apr 25 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
Apr 17 PHP
PHP读取文件或采集时解决中文乱码
Mar 09 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
php auth_http类库进行身份效验
2009/03/19 PHP
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
2013/06/28 PHP
Drupal7连接多个数据库及常见问题解决
2014/03/02 PHP
PHP检测数据类型的几种方法(总结)
2017/03/04 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
斜45度寻路实现函数
2009/08/20 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
JavaScript调试技巧之console.log()详解
2014/03/19 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
[01:10:48]完美世界DOTA2联赛PWL S2 GXR vs PXG 第一场 11.18
2020/11/18 DOTA
Python3学习urllib的使用方法示例
2017/11/29 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python中使用gflags实例及原理解析
2019/12/13 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
用python发送微信消息
2020/12/21 Python
经典C++面试题一
2016/11/06 面试题
历史系毕业生自荐信
2013/10/28 职场文书
营销经理工作检讨书
2014/11/03 职场文书
管理失职检讨书范文
2015/05/05 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
Ruby处理YAML和json数据
2022/04/18 Ruby
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL