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


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 相关文章推荐
一个简单计数器的源代码
Oct 09 PHP
自动分页的不完整解决方案
Jan 12 PHP
PHP 危险函数解释 分析
Apr 22 PHP
PHP MemCached高级缓存配置图文教程
Aug 05 PHP
php curl模拟post提交数据示例
Dec 31 PHP
非常实用的PHP常用函数汇总
Dec 17 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
Symfony2联合查询实现方法
Mar 18 PHP
Laravel中的Blade模板引擎示例详解
Oct 10 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
Laravel框架集合用法实例浅析
May 14 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函数代码
2013/08/29 PHP
php导入模块文件分享
2015/03/17 PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
2017/08/09 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
实测jquery data()如何存值
2013/08/18 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
怎么引入(调用)一个JS文件
2016/05/26 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
JavaScript实现图片拖曳效果
2017/09/08 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vue 样式切换及三元判断样式关联操作
2020/08/09 Javascript
vue 获取url参数、get参数返回数组的操作
2020/11/12 Javascript
原生JS实现京东查看商品点击放大
2020/12/21 Javascript
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
Python实现二维数组输出为图片
2018/04/03 Python
python入门:这篇文章带你直接学会python
2018/09/14 Python
python提取log文件内容并画出图表
2019/07/08 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
AmazeUI 单选框和多选框的实现示例
2020/08/18 HTML / CSS
经验丰富大学生村干部自我鉴定
2014/01/22 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
效能监察建议书
2014/05/19 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
经典爱情感言
2015/08/03 职场文书
导游词之天津盘山
2019/11/01 职场文书
为什么MySQL选择Repeatable Read作为默认隔离级别
2021/07/26 MySQL
java objectUtils 使用可能会出现的问题
2022/02/28 Java/Android
Python中time标准库的使用教程
2022/04/13 Python