点上面“东哥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得到它相关推荐

  1. mysql text保存图片_用mysql 如果包含有文字和图片,那么我要用哪种数据类型存储呢?还是分开,用TEXT和BLOB吗?...

    root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信图片_20190711095019.jpg "$i".jp ...

  2. qt mysql now()_Qt + mysql 運用 (項目一)

    自己整合了一些資料方便以后查看,另外參考了一些資料嘗試做了個學生管理系統 以下資料若有錯誤或有侵權的地方,請前輩們指正,謝謝! 在Qt項目中右鍵執行qmake,之后在運行. 另外一種方法是在MVS20 ...

  3. windows nodejs mysql_windows server 安装 mysql + nondejs连接mysql

    下载 安装 下载完后,将 zip 包解压到相应的目录,这里我将解压后的文件夹放在 C:\mysql 下. 接下来需要配置下 MySQL 的配置文件 打开刚刚解压的文件夹 C:\mysql ,在该文件夹 ...

  4. fedora mysql 客户端_fedora mysql 安装

    本例使用的是 mysql-5.0.45.tar.gz 安装编译前提: Yum install gcc Yum install gcc-c++ 1.第一个MYSQL安装 编译1.带上参数 ./confi ...

  5. window mysql 字符集_Windows mysql默认字符集修改

    一.通过MySQL命令行修改: mysql> SET character_set_client = utf8 ; mysql> SET character_set_connection = ...

  6. mysql启用keepalive_keepalive+mysql 主主配置

    1.   环境说明: 机器名 eth0 说明 server01 192.168.100.30/24 Mysql.keepalive server02 192.168.100.31/24 Mysql.k ...

  7. 使用MySQL Proxy解决MySQL主从同步延迟

    MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方 面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的, ...

  8. mysql isreg_`Innodb` MySQL中如何优雅的删除大表跑路

    最近很想写写MySQL相关的内容,就从这个话题出发吧 有人说删MySQL表谁不会 不就是 drop table TABLENAME 如果在生产环境中,你对一张TB级别的大表,敲下这行命令 那么你的主管 ...

  9. oracle收购Mysql后,Mysql的安装配置方法

    自从Oracle收购MySQL后,略微发生了一些小小的变化,原来mysql安装完成后默认是没有密码的,但是新版的mysql安装完成后oracle提供了一个free password放着/root/.m ...

最新文章

  1. linux fedora35安装kvm虚拟机命令整理
  2. 【☀️~爆肝万字总结递归~❤️玩转算法系列之我如何才能掌握递归解题的能力❤️~十大经典问题助你突破极限~建议收藏☀️】
  3. nginx实现大小写字母转换(ngx_http_lower_upper_case模块)
  4. 如何进行I/O评估、监控、定位和优化?
  5. mvc:default-servlet-handler/作用
  6. 真格量化——50期权历史波动率策略
  7. 硬解析和软解析 mysql_Oracle学习之shared pool--硬解析和软解析
  8. phpfpm内存越来越高_内存时序越小越好,为什么DDR1到DDR4 时序值越来越高了?
  9. 怎么样打印cxgrid过滤后的数据
  10. linux内核源码各个目录
  11. 使用js实现简单的动画效果
  12. Grails4 使用Audit-Logging Stampable 出现报错:HHH000142: Bytecode enhancement failed
  13. matlab绘制空间摆线轨迹
  14. Nodejs框架+uniapp前端微商个人相册多端小程序
  15. WebRTC系列 -- iOS 视频采集(1)
  16. SSM Chapter 12 SpringMVC扩展和SSM框架整合
  17. 前端程序员未来如何发展?
  18. 反余弦函数用途之一:关系距离计算
  19. 刷PAT啦1008~1010
  20. 【 linux系统入门管理篇-第二章文件和用户的管理】

热门文章

  1. 用JavaScript技术实现弹幕效果
  2. java sockets_Java Sockets
  3. 再放宽!这些应届生,可直接落户上海
  4. 数据分析怎么学?我画了一个导图,又找到22本书
  5. 苹果云服务icloud_苹果手机通讯录突然没了怎么办?分享简单的补救技巧
  6. 使用Gstreamer播放未知格式视频(python)
  7. linux下tar命令解压缩,tar解压缩命令 Linux下的tar压缩解压缩命令详解
  8. Linux环境下安装Calibre 源代码编译
  9. 数字录音系统服务器,IP数字网络广播控制中心服务器
  10. Redis 部署方式(单点、master/slaver、sentinel、cluster) 概念与区别