详解:――如何将图片储存在数据库里


Posted in PHP onDecember 05, 2006

如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。

本文概述:

。在mysql中建立一个新的数据库

。一个怎样储存文件的例子程序

。一个怎样访问文件的例子程序

在mysql中建立一个新的database

首先,你必须在你的mysql中建立一个新的数据库,我们将会把那些二进制文件储存在这个数据库里。在例子中我会使用下列结构,为了建立数据库,

你必须做下列步骤:

。进入MySql控制器

。输入命令"create database binary_data;"

。输入命令"use binary_data;"

。输入命令

"CREATE TABLE binary_data ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,description CHAR(50), bin_data LONGBLOB, filename CHAR(50), filesize CHAR(50), filetype CHAR(50));" (不能断行)

如果没有意外,数据库 和 表 应该建立好了。

一个怎样储存文件的例子程序

用这个例子你可以通过Html表单将文件传输到数据库中。

store.php3
<?php
// store.php3 - by Florian Dittmer <dittmer@gmx.net>
?>
<HTML>
<HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD>
<BODY>
<?php
// 如果提交了表单,代码将被执行:
if ($submit) {
// 连接到数据库
// (你可能需要调整主机名,用户名和密码)
MYSQL_CONNECT( "localhost", "root", "password");
mysql_select_db( "binary_data");
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$result=MYSQL_QUERY( "INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) 
[接上一行:] VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')"); 
$id= mysql_insert_id();
  print "<p>This file has the following Database ID: <b>$id</b>";
MYSQL_CLOSE();
} else {
// 否则显示储存新数据的表单
?>
<form method="post" action=" <?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</BODY>
</HTML>

如果你执行了这个程序,你将会看见一个简单的Html表单,单击“浏览”选择一个文件,然后单击提交。

当文件上传至web服务器之后,程序将会告诉你刚刚上传的文件的ID,记住这个ID,待会要用的。

一个怎样访问文件的例子程序

你可以通过这个程序访问你刚才储存的文件

<?php
// getdata.php3 - by Florian Dittmer <dittmer@gmx.net>
// 调用方法: getdata.php3?id=<id>
if($id) {
// 你可能需要调整主机名,用户名和密码:
 @MYSQL_CONNECT( "localhost", "root", "password");
 @mysql_select_db( "binary_data");
 $query = "select bin_data,filetype from binary_data where id=$id";
 $result = @MYSQL_QUERY($query);
 $data = @MYSQL_RESULT($result,0, "bin_data");
 $type = @MYSQL_RESULT($result,0, "filetype");
Header( "Content-type: $type");
echo $data;
};
?>

程序必须知道要访问那个文件, 你必须将ID作为一个参数。

例如: 一个文件在数据库中的ID为2. 你可以这样调用它:

getdata.php3?id=2

如果你将图片储存在数据库里, 你可以向调用图片一样调用它。

Example: 一个图片文件在数据库中的ID为3. 你可以这样调用它:

怎样储存大于1MB的文件:

如果你想储存大于1MB的文件,你必须对你的程序、PHP设置、SQL设置进行许多修改,。

下面几条也许可以帮助你储存小于24MB的文件:

1、修改 store.php3 ,将 MAX_FILE_SIZE 的值改成 24000000。

2、修改你的PHP设置,在一般情况下,PHP只允许小于2MB的文件,你必须将max_filesize(在php.ini中)的值改成24000000

3、去掉MYSQL的数据包大小限制,在一般情况下 MYSQL 小于1 MB的数据包.

4、你必须用以下参数重启你的MYSQL

/usr/local/bin/safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=24M

5、如果仍然出错:

可能是超时错误,如果你通过一个很慢的连接来储存一个很大的文件,PHP缺省的时间限制为30秒。你可以将max_execution_time(在php.ini中)的值改为-1

PHP 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
PHP 一个页面执行时间类代码
Mar 05 PHP
PHP XML数据解析代码
May 26 PHP
PHP5函数小全(分享)
Jun 06 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
Sep 22 PHP
php过滤XSS攻击的函数
Nov 12 PHP
PHP中nowdoc和heredoc使用需要注意的一点
Mar 21 PHP
php去掉URL网址中带有PHPSESSID的配置方法
Jul 08 PHP
微信自定义分享php代码分析
Nov 24 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
Mar 14 PHP
CI框架附属类用法分析
Dec 26 PHP
laravel 字段格式化 modle 字段类型转换方法
Sep 30 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 #PHP
PHP开发入门教程之面向对象
Dec 05 #PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 #PHP
扩展你的 PHP 之入门篇
Dec 04 #PHP
用 PHP5 轻松解析 XML
Dec 04 #PHP
PHP 已经成熟
Dec 04 #PHP
PHP 选项及相关信息函数库
Dec 04 #PHP
You might like
用PHP程序实现支持页面后退的两种方法
2008/06/30 PHP
PHP遍历数组的方法汇总
2015/04/30 PHP
PHP实现的浏览器检查类
2016/04/11 PHP
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
浅析jQuery的链式调用之each函数
2010/12/03 Javascript
js实现动态添加、删除行、onkeyup表格求和示例
2013/08/18 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
2013/10/18 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
jQuery修改class属性和CSS样式整理
2015/01/30 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
js中string和number类型互转换技巧(分享)
2016/11/28 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
Vue修改mint-ui默认样式的方法
2018/02/03 Javascript
Vue3 中的数据侦测的实现
2019/10/09 Javascript
解决vant的Toast组件时提示not defined的问题
2020/11/11 Javascript
node中短信api实现验证码登录的示例代码
2021/01/20 Javascript
在Python中使用HTML模版的教程
2015/04/29 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python中管道用法入门实例
2015/06/04 Python
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
装潢设计实习自我鉴定
2013/09/19 职场文书
实习生工作证明范本
2014/09/14 职场文书
处级干部考察材料
2014/12/24 职场文书
2015年乡镇信访工作总结
2015/04/07 职场文书
党员干部廉政承诺书
2015/04/28 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
使用react+redux实现计数器功能及遇到问题
2021/06/02 Javascript