搜尋
首頁php教程php手册php将图片保存入mysql数据库失败的解决方法,

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

本文实例分析了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,代码如下:

复制代码 代码如下:



  上传图片

 


 
 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,代码如下:

复制代码 代码如下:

 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程序设计有所帮助。

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器