用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 相关文章推荐
phpmyadmin 常用选项设置详解版
Mar 07 PHP
无法在发生错误时创建会话,请检查 PHP 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
Aug 01 PHP
PHP代码审核的详细介绍
Jun 13 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
php函数与传递参数实例分析
Nov 15 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 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
SONY ICF-F10中波修复记
2021/03/02 无线电
php实现的Timer页面运行时间监测类
2014/09/24 PHP
php字符串过滤与替换小结
2015/01/26 PHP
php include类文件超时问题处理
2015/02/06 PHP
PHP从FLV文件获取视频预览图的方法
2015/03/12 PHP
php表单提交实例讲解
2015/11/12 PHP
Ajax::prototype 源码解读
2007/01/22 Javascript
Node.js中使用mongoskin操作mongoDB实例
2014/09/28 Javascript
node.js中的fs.link方法使用说明
2014/12/15 Javascript
AngularJS内置指令
2015/02/04 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
通过vue手动封装on、emit、off的代码详解
2019/05/29 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
ReactRouter的实现方法
2021/01/25 Javascript
Python实现获取操作系统版本信息方法
2015/04/08 Python
Python zip()函数用法实例分析
2018/03/17 Python
python实现树形打印目录结构
2018/03/29 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python破解同事的压缩包密码
2020/10/14 Python
Python绘制数码晶体管日期
2021/02/19 Python
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
自动化专业毕业生求职信
2014/06/18 职场文书
关于青春的演讲稿500字
2014/08/22 职场文书
元旦标语大全
2014/10/09 职场文书
离婚财产分隔协议书
2014/10/23 职场文书
颐和园导游词400字
2015/01/30 职场文书
红色影片观后感
2015/06/18 职场文书
昆虫记读书笔记
2015/06/26 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
高三英语教学反思
2016/03/03 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS