php将图片保存入mysql数据库失败的解决方法


Posted in PHP onDecember 27, 2014

本文实例分析了php将图片保存入mysql数据库失败的解决方法。分享给大家供大家参考。具体分析如下:

图片保存数据库并不是一个明智的做法,我们多半是把图片保存到服务器,然后把图片地址保存到数据库,这样我们每次只要读出图片地址就可以显示了,但下面我还是来介绍一个图片保存到mysql数据库的问题解决办法,代码如下:

require 'class/db.php'; 

$fileName = "a1.jpg"; 

$fp = fopen($fileName, "r"); 

$img = fread($fp, filesize($fileName)); 

fclose($fp); 

 

$db->execute("insert db2.testimg (`img`) values ('$img') ;");

报错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '`?绶q?仳!????1丶>,Mo?'^WZ4in??T春??????U?楹\?' at line 1

代码如下:

$img = fread($fp, filesize($fileName));

$img = addslashes($img)

继续报错,各种搜索,百度里的结果都是addslashes,要不就是addslashes也没有的,真是扯淡啊.

base64_decode

$img = base64_encode($img);

插入成功,图片文件17.0k,出来进行base64_decode,显示正常,找到个16进制的办法:

$img = bin2hex($img);

有效,输出不用解密,存入数据库很大 25K,比base64还坑爹呢,再找,后来,后来,发现phpmyadmin直接上传的图片文件可以用文件比base64的小,文件12.8k.

翻phpmyadmin 源代码,common.lib.php文件183有个神奇的函数,代码如下:

function PMA_sqlAddslashes($a_string = '', $is_like = false, $crlf = false, $php_code = false) 

{ 

    if ($is_like) { 

        $a_string = str_replace('\', '\\\\', $a_string); 

    } else { 

        $a_string = str_replace('\', '\\', $a_string); 

    } 

 

    if ($crlf) { 

        $a_string = str_replace("n", 'n', $a_string); 

        $a_string = str_replace("r", 'r', $a_string); 

        $a_string = str_replace("t", 't', $a_string); 

    }

 

    if ($php_code) { 

        $a_string = str_replace(''', '\'', $a_string); 

    } else { 

        $a_string = str_replace(''', '''', $a_string); 

    } 

 

    return $a_string; 

} // end of the 'PMA_sqlAddslashes()' function$img = PMA_sqlAddslashes($img);

文件大小12.8K 和phpmyadmin的一样大.

例,前台image.html,代码如下:

<html> 

<head> 

  <title>上传图片</title> 

</head> 

 

<body> 

<form method="post" action="upimage.php" enctype="multipart/form-data"> 

 <input type="hidden" value="204800" name="MAX_FILE_SIZE"/> 

 File: <input type="file" name="imgfile" /> 

 <input type="submit" value="OK" name="submitbtn" style="width:100px;height:23px"/></center> 

</form> 

</body> 

</html>

后台处理upimage.php代码如下:
<?php 

 //向数据库中插入图片 

 $imgfile=$_FILES['imgfile']; 

 $submitbtn=$_POST['submitbtn']; 

 if($submitbtn=='OK' and is_array($imgfile)){ 

 $name=$imgfile['name'];  //取得图片名称 

 $type=$imgfile['type']; //取得图片类型 

 $size=$imgfile['size'];  //取得图片长度 

 $tmpfile=$imgfile['tmp_name'];  //图片上传上来到临时文件的路径 

 if($tmpfile and is_uploaded_file($tmpfile)){  //判断上传文件是否为空,文件是不是上传的文件 

  //读取图片流 

  $file=fopen($tmpfile,"rb"); 

  $imgdata=bin2hex(fread($file,$size));  //bin2hex()将二进制数据转换成十六进制表示 

  fclose($file); 

 

  $mysqli=mysql_connect("localhost","root","123456″);  //连接数据库函数 

  mysql_select_db("test");  //选择数据库 

  //插入出数据库语句,图片数据前要加上0x,用于表示16进制数 

  if(mysql_query("insert into images(name,type,image) values('".$name."','".$type."',0x".$imgdata.")")) 

   echo "<center>插入成功!<br><br><a href='disimage.php'>显示图片</a></center>"; 

  else 

   echo "<center>插入失败!</center>"; 

  mysql_close(); 

 }else 

 echo "<center>请先选择图片!<br><br><a href='image.html'>点此返回</a></center>"; 

} else 

 echo "<center>请先选择图片!<br><br><a href='image.html'>点此返回</a></center>"; 

?>

显示图片disimage.php,代码如下:
<?php 

 mysql_connect("localhost","root","123456″); 

 mysql_select_db("test"); 

 //显示最新插入的那张图片 

 $result=mysql_query("select image from images where id=(select max(id) from images)"); 

 $row=mysql_fetch_object($result); 

 header("Content-Type:image/pjpeg"); 

 echo $row->image; 

 mysql_close(); 

?>

结论:

PMA_sqlAddslashes好用 文件12.8k 和原来图片一样大

bin2hex 16进制 好用文件25K

base64_encode 好用,出来的文件需要base64_decode 17K

addslashes 不好用,继续报错,注明,在某些windows机器上addslashes好用.

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php下实现折线图效果的代码
Apr 28 PHP
php中大括号作用介绍
Mar 22 PHP
Zend的MVC机制使用分析(一)
May 02 PHP
获取php页面执行时间,数据库读写次数,函数调用次数等(THINKphp)
Jun 03 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
Nov 07 PHP
PHP生成器简单实例
May 13 PHP
js代码实现微博导航栏
Jul 30 PHP
学习php设计模式 php实现装饰器模式(decorator)
Dec 07 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
laravel请求参数校验方法
Oct 10 PHP
Yii 框架入口脚本示例分析
May 19 PHP
php下pdo的mysql事务处理用法实例
Dec 27 #PHP
php5.3不能连接mssql数据库的解决方法
Dec 27 #PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 #PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 #PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 #PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 #PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 #PHP
You might like
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
PHP实现基于mysqli的Model基类完整实例
2016/04/08 PHP
autoPlay 基于jquery的图片自动播放效果
2011/12/07 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
2015/05/15 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
原生JS实现图片网格式渐显、渐隐效果
2017/06/05 Javascript
使用D3.js创建物流地图的示例代码
2018/01/27 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
用Python实现web端用户登录和注册功能的教程
2015/04/30 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
django中的setting最佳配置小结
2017/11/21 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
Django框架创建mysql连接与使用示例
2019/07/29 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
创建市级文明单位实施方案
2014/03/01 职场文书
我们的节日端午节活动方案
2014/03/02 职场文书
个人委托书怎么写
2014/04/04 职场文书
文秘应届生求职信
2014/07/05 职场文书
我的梦想演讲稿500字
2014/08/21 职场文书
党小组评议意见
2015/06/02 职场文书
地道战观后感400字
2015/06/04 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
JavaScript分页组件使用方法详解
2021/07/26 Javascript
使用python绘制分组对比柱状图
2022/04/21 Python