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开发中常用的字符串操作函数
Feb 08 PHP
php 截取字符串并以零补齐str_pad() 函数
May 07 PHP
一个好用的PHP验证码类实例分享
Dec 27 PHP
php中Ctype函数用法详解
Dec 09 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
PHP Curl模拟登录微信公众平台、新浪微博实例代码
Jan 28 PHP
php批量删除操作(数据访问)
May 23 PHP
php使用fullcalendar日历插件详解
Mar 06 PHP
PHP+redis实现微博的推模型案例分析
Jul 10 PHP
PHP实现批量修改文件名的方法示例
Sep 18 PHP
php实现自动生成验证码的实例讲解
Nov 17 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
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
jQuery TextBox自动完成条
2009/07/22 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery自定义下拉列表示例
2014/04/25 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
Linux下编译安装php libevent扩展实例
2015/02/14 Javascript
聊一聊JS中this的指向问题
2016/06/17 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
详解在AngularJS的controller外部直接获取$scope
2017/06/02 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
2017/10/08 Javascript
JavaScript基础心法 深浅拷贝(浅拷贝和深拷贝)
2018/03/05 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
[02:40]DOTA2英雄基础教程 炼金术士
2013/12/23 DOTA
举例讲解Python中的算数运算符的用法
2015/05/13 Python
Python学习思维导图(必看篇)
2017/06/26 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
CSS3之边框多颜色Border-color属性使用示例
2013/10/11 HTML / CSS
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
如何写好建议书
2014/03/13 职场文书
班级心理活动总结
2014/07/04 职场文书
2014年销售工作总结
2014/12/01 职场文书
财务稽核岗位职责
2015/04/13 职场文书
小学入学感言
2015/08/01 职场文书