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设计模式 DAO(数据访问对象模式)
Jun 26 PHP
破解.net程序(dll文件)编译和反编译方法
Jan 31 PHP
php匹配字符中链接地址的方法
Dec 22 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
如何实现php图片等比例缩放
Jul 28 PHP
YII CLinkPager分页类扩展增加显示共多少页
Jan 29 PHP
php根据年月获取当月天数及日期数组的方法
Nov 30 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 PHP
PHP判断是否是微信打开还是浏览器打开的方法
Feb 27 PHP
Laravel手动返回错误码示例
Oct 22 PHP
Centos7安装swoole扩展操作示例
Mar 26 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
简单的PHP留言本实例代码
2010/05/09 PHP
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
php获取图片信息的方法详解
2015/12/10 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
php链式操作的实现方式分析
2019/08/12 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
javawscript 三级菜单的实现原理
2009/07/01 Javascript
Ext.FormPanel 提交和 Ext.Ajax.request 异步提交函数的区别
2009/11/12 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
简述Angular 5 快速入门
2017/11/04 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
jQuery+ThinkPHP实现图片上传
2020/07/23 jQuery
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
基于Django的python验证码(实例讲解)
2017/10/23 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
Python GUI Tkinter简单实现个性签名设计
2018/06/19 Python
Django csrf 验证问题的实现
2018/10/09 Python
python list转置和前后反转的例子
2019/08/26 Python
python怎么调用自己的函数
2020/07/01 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
HTML5 新表单类型示例代码
2018/03/20 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
什么是Oracle的后台进程background processes?都有哪些后台进程?
2012/04/26 面试题
晚会邀请函范文
2014/01/24 职场文书
销售人员自我评价
2014/02/01 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
教师工作证明范本
2015/06/12 职场文书
作文之亲情600字
2019/09/23 职场文书