Home  >  Article  >  Backend Development  >  Solution to Failed to Save PHP Pictures into MySQL Database_PHP Tutorial

Solution to Failed to Save PHP Pictures into MySQL Database_PHP Tutorial

WBOY
WBOYOriginal
2016-07-13 17:06:331027browse

It is not a wise idea to save pictures in the database. Most of us save the pictures to the server, and then save the picture address to the database. In this way, we only need to read the picture address every time to display it, but I will introduce it below. Solution to the problem of saving a picture to mysql database.

The code is as follows Copy code
 代码如下 复制代码

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') ;");

require 'class/db.php';

$fileName = "a1.jpg";
$fp = fopen($fileName, "r");

 代码如下 复制代码

$img = fread($fp, filesize($fileName));
$img = addslashes($img)

$img = fread($fp, filesize($fileName));

fclose($fp);

$db->execute("insert db2.testimg (`img`) values ​​('$img') ;");

Report error

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?' ^ W Z4in??T春??????U?湹?' at line 1

The code is as follows Copy code

$img = fread($fp, filesize($fileName)); $img = addslashes($img)

Continue to report errors


For various searches, the results in Baidu are all addslashes, or there are no addslashes at all. What nonsense

base64_decode

$img = base64_encode($img);

Insertion successful. Image file 17.0k

Come out and perform base64_decode, the display is normal

Find a hexadecimal method
 代码如下 复制代码

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);

$img = bin2hex($img); Effective, the output does not need to be decrypted. The size of the database stored is 25K. It's even more deceptive than base64. Look again. Later, later. I found that the image files uploaded directly by phpmyadmin can be smaller than base64. File 12.8k Turn over phpmyadmin source code Common.lib.php file 183 has a magical function
The code is as follows Copy code
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:
 




  上传图片

 


 
 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 "
请先选择图片!

点此返回
";
?>

 代码如下 复制代码

 //向数据库中插入图片
 $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 "
请先选择图片!

点此返回
";
?>

 代码如下 复制代码

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();
?>

显示图片(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();
?>


Conclusion

PMA_sqlAddslashes is easy to use. The file size is 12.8k and the same size as the original image
bin2hex hexadecimal useful file 25K
base64_encode is easy to use, the output file requires base64_decode 17K
addslashes is not easy to use, continue to report errors (note: addslashes is easy to use on some windows machines)

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/630680.htmlTechArticleIt is not a wise idea to save pictures in the database. Most of us save the pictures to the server and then save the picture address. to the database, so that we only need to read the image address every time...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn