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学习之PHP变量
Oct 09 PHP
php下实现农历日历的代码
Mar 07 PHP
php表单提交问题的解决方法
Apr 12 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 PHP
将PHP的session数据存储到数据库中的代码实例
Jun 24 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
Oct 24 PHP
PHP树形结构tree类用法示例
Feb 01 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
Aug 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
php zip文件解压类代码
2009/12/02 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
第七章之菜单按钮图标组件
2016/04/25 Javascript
ECMAScript6快速入手攻略
2016/07/18 Javascript
BootStrap无限级分类(无限极分类封装版)
2016/08/26 Javascript
JavaScript之cookie技术详解
2016/11/18 Javascript
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python中xrange和range的区别
2014/05/13 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
深入解析Python设计模式编程中建造者模式的使用
2016/03/02 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
pygame实现俄罗斯方块游戏(基础篇3)
2019/10/29 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
Python虚拟环境库virtualenvwrapper安装及使用
2020/06/17 Python
Django数据模型中on_delete使用详解
2020/11/30 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
爱尔兰领先的在线体育用品零售商:theGAAstore
2018/04/16 全球购物
意大利奢侈品零售商:ilDuomo Novara
2019/09/11 全球购物
初中三年学生的学习自我评价
2013/11/13 职场文书
幼儿园中秋节活动方案
2014/02/06 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
大学生见习期满自我鉴定
2014/09/13 职场文书
2014年国庆节庆祝建国65周年比赛演讲稿
2014/09/21 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
社区义诊通知
2015/04/24 职场文书
婚宴致辞
2015/07/28 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL