您好,欢迎访问一九零五行业门户网

php将图片保存入mysql数据库失败的解决方法

这篇文章主要介绍了php将图片保存入mysql数据库失败的解决方法,详细分析了php将图片保存入数据库遇到的问题及对应的解决方法,并总结了相关的技巧,具有一定的参考
本文实例分析了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?'^wz4int春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,代码如下:
复制代码 代码如下:
上传图片
file:
后台处理upimage.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
插入成功!
显示图片;
  else
   echo 插入失败!;
  mysql_close();
 }else
 echo 请先选择图片!
点此返回;
} else
 echo 请先选择图片!
点此返回;
?>
显示图片disimage.php,代码如下:
复制代码 代码如下:
其它类似信息

推荐信息