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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
邮箱正则表达式实现代码(针对php)
Jun 21 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
浅谈PHP中output_buffering
Jul 13 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
php session的应用详细介绍
Mar 22 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
Oct 11 PHP
php7 参数、整形及字符串处理机制修改实例分析
May 25 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
一个基于PDO的数据库操作类(新) 一个PDO事务实例
2011/07/03 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
2011/11/07 PHP
如何利用php array_multisort函数 对数据库结果进行复杂排序
2013/06/08 PHP
thinkPHP5框架自定义验证器实现方法分析
2018/06/11 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
jQuery实现手机号码输入提示功能实例
2015/04/30 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
JS实现图片高亮展示效果实例
2015/11/24 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
React.js入门学习第一篇
2016/03/30 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
JavaScript基于Dom操作实现查找、修改HTML元素的内容及属性的方法
2017/01/20 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Python制作数据导入导出工具
2015/07/31 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
2019/05/29 Python
python 字段拆分详解
2019/12/17 Python
python 安装impala包步骤
2020/03/28 Python
html5+css3之制作header实例与更新
2020/12/21 HTML / CSS
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
国庆庆典邀请函
2015/02/02 职场文书
因工资原因离职的辞职信范文
2015/05/12 职场文书
婚庆司仪开场白
2015/05/29 职场文书
党员心得体会范文2016
2016/01/23 职场文书
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技