国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php圖片保存入mysql數(shù)據(jù)庫失敗解決辦法

2024-05-04 21:49:12
字體:
供稿:網(wǎng)友

圖片保存數(shù)據(jù)庫并不是一個明智的做法,我們多半是把圖片保存到服務(wù)器,然后把圖片地址保存到數(shù)據(jù)庫,這樣我們每次只要讀出圖片地址就可以顯示了,但下面我還是來介紹一個圖片保存到mysql數(shù)據(jù)庫的問題解決辦法,代碼如下:

  1. require 'class/db.php'
  2. $fileName = "a1.jpg"
  3. $fp = fopen($fileName"r"); 
  4.  
  5. $img = fread($fpfilesize($fileName)); 
  6. fclose($fp); 
  7.  
  8. $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)

繼續(xù)報錯,各種搜索,百度里的結(jié)果都是addslashes,要不就是addslashes也沒有的,真是扯淡啊.

base64_decode

$img = base64_encode($img);

插入成功,圖片文件17.0k,出來進(jìn)行base64_decode,顯示正常,找到個16進(jìn)制的辦法:

$img = bin2hex($img);

有效,輸出不用解密,存入數(shù)據(jù)庫很大 25K,比base64還坑爹呢,再找,后來,后來,發(fā)現(xiàn)phpmyadmin直接上傳的圖片文件可以用文件比base64的小,文件12.8k.

翻phpmyadmin 源代碼,common.lib.php文件183有個神奇的函數(shù),代碼如下:

  1. function PMA_sqlAddslashes($a_string = ''$is_like = false, $crlf = false, $php_code = false) 
  2.     if ($is_like) { 
  3.         $a_string = str_replace('/', '////', $a_string); 
  4.     } else { 
  5.         $a_string = str_replace('/', '//', $a_string); 
  6.     } 
  7.  
  8.     if ($crlf) { 
  9.         $a_string = str_replace("n"'n'$a_string); 
  10.         $a_string = str_replace("r"'r'$a_string); 
  11.         $a_string = str_replace("t"'t'$a_string); 
  12.     }//開源代碼Vevb.com 
  13.  
  14.     if ($php_code) { 
  15.         $a_string = str_replace(''', '/''$a_string); 
  16.     } else { 
  17.         $a_string = str_replace(''', '''', $a_string); 
  18.     } 
  19.  
  20.     return $a_string
  21. // end of the 'PMA_sqlAddslashes()' function$img = PMA_sqlAddslashes($img); 

文件大小12.8K 和phpmyadmin的一樣大.

例,前臺image.html,代碼如下:

  1. <html> 
  2. <head> 
  3.   <title>上傳圖片</title> 
  4. </head> 
  5.  
  6. <body> 
  7. <form method="post" action="upimage.php" enctype="multipart/form-data"> 
  8.  <input type="hidden" value="204800" name="MAX_FILE_SIZE"/> 
  9.  File: <input type="file" name="imgfile" /> 
  10.  <input type="submit" value="OK" name="submitbtn" style="width:100px;height:23px"/></center> 
  11. </form> 
  12. </body> 
  13. </html> 

后臺處理upimage.php代碼如下:

  1. <?php 
  2.  //向數(shù)據(jù)庫中插入圖片 
  3.  $imgfile=$_FILES['imgfile']; 
  4.  $submitbtn=$_POST['submitbtn']; 
  5.  if($submitbtn=='OK' and is_array($imgfile)){ 
  6.  $name=$imgfile['name'];  //取得圖片名稱 
  7.  $type=$imgfile['type']; //取得圖片類型 
  8.  $size=$imgfile['size'];  //取得圖片長度 
  9.  $tmpfile=$imgfile['tmp_name'];  //圖片上傳上來到臨時文件的路徑 
  10.  if($tmpfile and is_uploaded_file($tmpfile)){  //判斷上傳文件是否為空,文件是不是上傳的文件 
  11.   //讀取圖片流 
  12.   $file=fopen($tmpfile,"rb"); 
  13.   $imgdata=bin2hex(fread($file,$size));  //bin2hex()將二進(jìn)制數(shù)據(jù)轉(zhuǎn)換成十六進(jìn)制表示 
  14.   fclose($file); 
  15.  
  16.   $mysqli=mysql_connect("localhost","root","123456″);  //連接數(shù)據(jù)庫函數(shù) 
  17.   mysql_select_db("test");  //選擇數(shù)據(jù)庫 
  18.   //插入出數(shù)據(jù)庫語句,圖片數(shù)據(jù)前要加上0x,用于表示16進(jìn)制數(shù) 
  19.   if(mysql_query("insert into images(name,type,image) values('".$name."','".$type."',0x".$imgdata.")")) 
  20.    echo "<center>插入成功!<br><br><a href='disimage.php'>顯示圖片</a></center>"
  21.   else 
  22.    echo "<center>插入失敗!</center>"
  23.   mysql_close(); 
  24.  }else 
  25.  echo "<center>請先選擇圖片!<br><br><a href='image.html'>點此返回</a></center>"
  26. else 
  27.  echo "<center>請先選擇圖片!<br><br><a href='image.html'>點此返回</a></center>"
  28. ?> 

顯示圖片disimage.php,代碼如下:

  1. <?php 
  2.  mysql_connect("localhost","root","123456″); 
  3.  mysql_select_db("test"); 
  4.  //顯示最新插入的那張圖片 
  5.  $result=mysql_query("select image from images where id=(select max(id) from images)"); 
  6.  $row=mysql_fetch_object($result); 
  7.  header("Content-Type:image/pjpeg"); 
  8.  echo $row->image; 
  9.  mysql_close(); 
  10. ?> 

結(jié)論:

PMA_sqlAddslashes好用 文件12.8k 和原來圖片一樣大

bin2hex 16進(jìn)制 好用文件25K

base64_encode 好用,出來的文件需要base64_decode 17K

addslashes 不好用,繼續(xù)報錯,注明,在某些windows機(jī)器上addslashes好用.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大连市| 得荣县| 西乌| 西乌珠穆沁旗| 突泉县| 满城县| 许昌县| 红桥区| 景东| 嘉兴市| 高州市| 舟曲县| 翁源县| 高密市| 汪清县| 信宜市| 新余市| 乌拉特中旗| 榆树市| 牟定县| 瑞昌市| 新乐市| 喜德县| 延长县| 奇台县| 司法| 博野县| 恭城| 诸暨市| 澳门| 敦煌市| 平舆县| 昆山市| 胶州市| 迁安市| 锡林浩特市| 永年县| 富平县| 台北市| 松江区| 厦门市|