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生成静态页面详解
Dec 05 PHP
从网上搜到的phpwind 0day的代码
Dec 07 PHP
PHP+.htaccess实现全站静态HTML文件GZIP压缩传输(一)
Feb 15 PHP
用php解析html的实现代码
Aug 08 PHP
PHP动态分页函数,PHP开发分页必备啦
Nov 07 PHP
深入解析fsockopen与pfsockopen的区别
Jul 05 PHP
PHP 获取远程文件大小的3种解决方法
Jul 11 PHP
ThinkPHP控制器间实现相互调用的方法
Oct 31 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
PHP实现的自定义数组排序函数与排序类示例
Nov 18 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
Sep 30 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
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
PHP实现简易blog的制作
2016/10/24 PHP
smarty模板数学运算示例
2016/12/11 PHP
php桥接模式应用案例分析
2019/10/23 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
再谈javascript 动态添加样式规则 W3C校检
2009/12/25 Javascript
jquery聚焦文本框与扩展文本框聚焦方法
2012/10/12 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
jquery插件EasyUI中form表单提交实例分享
2016/01/11 Javascript
javascript HTML5 canvas实现打砖块游戏
2020/06/18 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
详解vuelidate 对于vueJs2.0的验证解决方案
2017/03/09 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
js实现简单模态框实例
2018/11/16 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
js瀑布流布局的实现
2020/06/28 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
python之Socket网络编程详解
2016/09/29 Python
解决使用pycharm提交代码时冲突之后文件丢失找回的方法
2018/08/05 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
FFT快速傅里叶变换的python实现过程解析
2019/10/21 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
学习经验交流会主持词
2014/04/01 职场文书
建材投资建议书
2014/05/16 职场文书
2014年置业顾问工作总结
2014/11/17 职场文书
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python