通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它
点上面“东哥IT笔记”,关注并星标
每天一篇业界最新技术分享
首先,我要说的是把一个图片保存在MySQL中,再读出来是一个很不推荐的做法。我们只是看看假如真的要这样做,该如何做,最后我会和大家聊聊一般我们如何处理这种使用情况,以及不推荐这样做的原因。
首先图片是一个BLOB(Binary Large Object)是可以用来存储二进制的数据。这就是用来保存图片,文件等等的数据。因为这种object通常都很大,所以我们需要定义一个很大的域来保存信息。如何通过PHP来插入呢,其实很简单:
1)读取图片成二进制
2)准备插入到数据库
3)使用SQL语句插入相关数据到数据库
下面我们来看看简单的PHP代码:// Image submitted by form. Open it for reading (mode "r")$fp = fopen($_FILES['file_name']['tmp_name'], "r");// If successful, read from the file pointer using the size of thefile (in bytes) as the length.if ($fp) {$content = fread($fp,$_FILES['file_name']['size']);fclose($fp);// Add slashes to thecontent so that it will escape special characters.// As pointed out,mysql_real_escape_string can be used here as well. Yourchoice.$content =addslashes($content);// Insert into the table"table" for column "image" with our binary string of data("content")mysql_query("Insertinto table (image) Values('$content')");}
这里我们使用了fread()来把图片读取成比特,有了相关比特数据之后,就是简单地把它插入到BLOB的列就可以了。我们例子中image列是一个BLOB的数据类型。需要注意的是你选择的BLOB的列大小需要能够保存相应图片的大小,因为MySQL还是有不同大小的BLOB数据类型的。
下面我们来看一下如何获取图片数据,同样需要三个步骤:
1)设置content的type到图片的类型
2)找到图片,并且把它从数据库中拿出来
3)显示图片
相关的代码如下:// Read the row we want to pull out of the database.$result = mysql_query("select image from table where id =1");// If successful, fetch the row as an array and store the data fromthe "image" column into a variable.if ($result) {if ($row =mysql_fetch_array($result)) {$img =$row["image"];}}// Set the content type of this page to image/jpeg since the imagewe are pulling out is a jpgimage.header("Content-type: image/jpeg");// Echo out the image.echo "$img";
我们把数据从image列中拿出来,并且保存在一个变量中,然后我们设置相关content-type为image/jpeg就可以了,然后就可以显示相关的内容了。
需要注意的是不要在header()调用之前打印任何部分,否则在调用header的时候会报错"Headersalready sent"。
其实说白了,这个和别的BLOB数据的插入读取是一样的,并没有任何差别。
下面我们来谈谈为什么不要把图片保存到数据库中呢?因为数据库一般为了查询的方便会进行分页,而一些大的数据则会导致查询变得很慢,所以我们还是不要这样做为好。
那么推荐的做法是什么呢?我们一般会存储相关文件的路径就可以了。当想要找相关文件的时候,只要找到相关的路径就可以了,然后再根据相关的路径去磁盘找到需要显示的文件就可以了。这样做有两个好处:1)这样数据库的数据就很小了。2)有了文件的名字,我们就可以用文件名来查找相关的文件了。
好了,这就是本文要讲的内容了。
通过PHP保存图片到mysql,如何使用MySQL保存一个图片并且用PHP得到它相关推荐
- mysql text保存图片_用mysql 如果包含有文字和图片,那么我要用哪种数据类型存储呢?还是分开,用TEXT和BLOB吗?...
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jp ...
- qt mysql now()_Qt + mysql 運用 (項目一)
自己整合了一些資料方便以后查看,另外參考了一些資料嘗試做了個學生管理系統 以下資料若有錯誤或有侵權的地方,請前輩們指正,謝謝! 在Qt項目中右鍵執行qmake,之后在運行. 另外一種方法是在MVS20 ...
- windows nodejs mysql_windows server 安装 mysql + nondejs连接mysql
下载 安装 下载完后,将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\mysql 下. 接下来需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\mysql ,在该文件夹 ...
- fedora mysql 客户端_fedora mysql 安装
本例使用的是 mysql-5.0.45.tar.gz 安装编译前提: Yum install gcc Yum install gcc-c++ 1.第一个MYSQL安装 编译1.带上参数 ./confi ...
- window mysql 字符集_Windows mysql默认字符集修改
一.通过MySQL命令行修改: mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = ...
- mysql启用keepalive_keepalive+mysql 主主配置
1. 环境说明: 机器名 eth0 说明 server01 192.168.100.30/24 Mysql.keepalive server02 192.168.100.31/24 Mysql.k ...
- 使用MySQL Proxy解决MySQL主从同步延迟
MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方 面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的, ...
- mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路
最近很想写写MySQL相关的内容,就从这个话题出发吧 有人说删MySQL表谁不会 不就是 drop table TABLENAME 如果在生产环境中,你对一张TB级别的大表,敲下这行命令 那么你的主管 ...
- oracle收购Mysql后,Mysql的安装配置方法
自从Oracle收购MySQL后,略微发生了一些小小的变化,原来mysql安装完成后默认是没有密码的,但是新版的mysql安装完成后oracle提供了一个free password放着/root/.m ...
最新文章
- linux fedora35安装kvm虚拟机命令整理
- 【☀️~爆肝万字总结递归~❤️玩转算法系列之我如何才能掌握递归解题的能力❤️~十大经典问题助你突破极限~建议收藏☀️】
- nginx实现大小写字母转换(ngx_http_lower_upper_case模块)
- 如何进行I/O评估、监控、定位和优化?
- mvc:default-servlet-handler/作用
- 真格量化——50期权历史波动率策略
- 硬解析和软解析 mysql_Oracle学习之shared pool--硬解析和软解析
- phpfpm内存越来越高_内存时序越小越好,为什么DDR1到DDR4 时序值越来越高了?
- 怎么样打印cxgrid过滤后的数据
- linux内核源码各个目录
- 使用js实现简单的动画效果
- Grails4 使用Audit-Logging Stampable 出现报错:HHH000142: Bytecode enhancement failed
- matlab绘制空间摆线轨迹
- Nodejs框架+uniapp前端微商个人相册多端小程序
- WebRTC系列 -- iOS 视频采集(1)
- SSM Chapter 12 SpringMVC扩展和SSM框架整合
- 前端程序员未来如何发展?
- 反余弦函数用途之一:关系距离计算
- 刷PAT啦1008~1010
- 【 linux系统入门管理篇-第二章文件和用户的管理】
热门文章
- 用JavaScript技术实现弹幕效果
- java sockets_Java Sockets
- 再放宽!这些应届生,可直接落户上海
- 数据分析怎么学?我画了一个导图,又找到22本书
- 苹果云服务icloud_苹果手机通讯录突然没了怎么办?分享简单的补救技巧
- 使用Gstreamer播放未知格式视频(python)
- linux下tar命令解压缩,tar解压缩命令 Linux下的tar压缩解压缩命令详解
- Linux环境下安装Calibre 源代码编译
- 数字录音系统服务器,IP数字网络广播控制中心服务器
- Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别