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操作XML作为数据库的类
Dec 19 PHP
php生成缩略图填充白边(等比缩略图方案)
Dec 25 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
php跨站攻击实例分析
Oct 28 PHP
PHP实现微信发红包程序
Aug 24 PHP
微信红包随机生成算法php版
Jul 21 PHP
php中static和const关键字用法分析
Dec 07 PHP
php实现图片按比例截取的方法
Feb 06 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
php解决约瑟夫环算法实例分析
Sep 30 PHP
ThinkPHP5和ThinkPHP6的区别
Mar 31 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
php排序算法(冒泡排序,快速排序)
2012/10/09 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
javascript最基本的函数汇总
2015/06/25 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
jQuery封装的屏幕居中提示信息代码
2016/06/08 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
深入理解Angular中的依赖注入
2017/06/26 Javascript
nodejs用gulp管理前端文件方法
2018/06/24 NodeJs
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
微信小程序实现蓝牙打印
2019/09/23 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Python加密模块的hashlib,hmac模块使用解析
2020/01/02 Python
聊聊Python pandas 中loc函数的使用,及跟iloc的区别说明
2021/03/03 Python
html5唤起app的方法
2017/11/30 HTML / CSS
美国家用电器和电子产品商店:Abt
2016/09/06 全球购物
德国知名健康零食网上商店:Seeberger
2017/07/27 全球购物
青年教师典范事迹材料
2014/01/31 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
护士找工作求职信
2014/07/02 职场文书
安全生产知识竞赛活动总结
2014/07/07 职场文书
公务员年度考核评语
2014/12/31 职场文书
自荐信大全
2019/03/21 职场文书
在Windows下安装配置CPU版的PyTorch的方法
2021/04/02 Python
使用Redis实现秒杀功能的简单方法
2021/05/08 Redis