php 将图片以二进制存入mysql数据库

时间:2021-11-25 21:42:47
有部分图片要存入mysql数据库,改怎么做啊?

<?php 

$DBserver = "localhost";
$DBname = "new";
$DBuser = "root";
$DBpassword = "";

$con = mysql_connect("localhost","root","");

...

?>

11 个解决方案

#1


图片直接按照特定规则生成URI存磁盘就可以了。

#2


 
INSERT INTO `member` ( `xxxx`) VALUES 
(_binary 0x496E6E6F20536574757020556E696E7374616C6C204C6F6720286229000000000000000000000000000000000000000000000000000000000000000000000000486569646953514C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000486569646953514CFF); 

#3


木有人回答了。。如果非存数据库。。你就file_get_content得到串,addslashes之后插入即可,像普通字段一样。

#4



<?
/*
 * 把图片存入mysql数据库
 *
 #
 # 数据表的结构 `images`
 #

CREATE TABLE images (
  picid int(3) NOT NULL auto_increment,
  picdata longblob NOT NULL,
  pictext varchar(100) NOT NULL default '',
  PRIMARY KEY  (picid)
) TYPE=MyISAM;

 */
if(trim($picfile[0])!=""){
    $link=@mysql_connect("localhost","root","root");
    //连接,用你的具体连接名替换root,具体连接密码替换root
        if($link==false) 
           {
     echo "<script>alert('连接数据库时发生错误,请稍后再试!')</script>";
           }
    $res=mysql_select_db("kkk");
        if($res==false) 
           {
     echo "<script>alert('打开数据库时发生错误,请稍后再试!')</script>";
           }
  $tmpset=0;  
  // 存放成功加入的图片数目
  for($i=0;$i<=3;$i++)
      { 
      // picfile[i]存放所提交的图片信息(文件路径)
      if(trim($picfile[$i])!="")
         {
         //读取数据
         $fp=fopen($picfile[$i],"r");
         $picdata=fread($fp,filesize($picfile[$i]));
         fclose($fp);
         //加上必要的标志符号
         $picdata=addslashes($picdata);
         //用具体的数据表名代替images
         //pictext[i]存放所提交的图片的文字说明
         $qu="insert into images(picdata,pictext) values('$picdata','$pictext[$i]')";
         $res=@mysql_query($qu,$link);  
               if($res==false) 
                   {
       echo "<script>alert('图片 ".$i." 提交失败!')</script>";
                   continue;
                   }  
         $tmpset=$tmpset+1;                                 
         }
       }
  echo "<script>alert('操作成功!实际入库图片数 ".$tmpset." 张')</script>";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<form action="<? echo $PHP_SELF; ?>" method="post" enctype="multipart/form-data" name="form1">
  <input type="file" name="picfile[]">
  文件说明 
  <input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="submit" name="Submit" value="提交">
</form>
</body>
</html>

显示存在mysql中的图片
<? 
/*
 * 显示存在mysql中的图片
 * 在外部用<img src="displayimg.php?picid=1">来调用数据库中的第一张图片
 #
 # 数据表的结构 `images`
 #

CREATE TABLE images (
  picid int(3) NOT NULL auto_increment,
  picdata longblob NOT NULL,
  pictext varchar(100) NOT NULL default '',
  PRIMARY KEY  (picid)
) TYPE=MyISAM;

 */

$link=@mysql_connect("localhost","root","root"); 
mysql_select_db("kkk");
$qu="select picid,picdata from images where picid=$picid"; 
$res=@mysql_query($qu,$link); 
$num=mysql_num_rows($res);
   if($num==0) 
      { 
      print "<br><br><br>";
      print "<p><b>没有这张图片!</b></p>";
      exit();  
      }
$row=@mysql_fetch_row($res);  
header("Content-type:image/");
echo $row[1];
?>

#5


图片先上传,然后在数据库中保存路径!!!

#6


路径怎么保存在picfile[i]中呢?

我试了试固定的路径,貌似不行啊

#7



<?
$DBserver = "localhost";
$DBname = "new";
$DBuser = "root";
$DBpassword = "";

$con = mysql_connect("localhost","root","");
mysql_select_db("new");
      
      if(trim("E:\wamp\www\images\0\0a\Yanjiujinzhan.png")!="")
      {
         
         $fp=fopen("E:\wamp\www\images\0\0a\Yanjiujinzhan.png","r");
         
         $imgdata=fread($fp,filesize($fp));
         
         fclose($fp);
         
         $imgdata=addslashes($imgdata);
         
         $sql="insert into image(img_size) value ('{$imgdata}')";
         $con = @mysql_query($sql);
     mysql_query($sql) or die(mysql_error());
         
      }
?>

#8


1. $imgdata=fread($fp,filesize($fp));
filesize()接受的是一个字符串类型的文件名,而不是一个连接句柄
2. $imgdata=addslashes($imgdata);
二进制数据不需要这样
3.  $con = @mysql_query($sql); 这是什么? 重复插入了已经。

#9


一般不建议将图片保存在数据库中,因为图片都比较大会影响查询的效率
小图片是可以放在库中的,并且隐秘性较好

存放图片数据的字段应使用 blob 类型的,如果用 text 类型就可能出现问题(字符集的原因)
Blob 64K
MediumBlob 16M
LongBlob 4G

在 window 下打开图片文件要用 rb 方式(显式的声明为二进制方式)
使用 file_get_contents 函数要高效的多

另外,即便是在 window 下面,路径符也要用“/”,养成良好的习惯,路子更宽
E:/wamp/www/images/0/0a/Yanjiujinzhan.png

#10


方法上面已经有了

但我只能说从DBA的角度讲,这是非常不推荐,甚至非常忌讳的一种使用方法...

#11




$DBserver = "localhost";
$DBname = "new";
$DBuser = "root";
$DBpassword = "";

$con = mysql_connect("localhost","root","");
mysql_select_db("new");
      
      if(trim("E:/wamp/www/QWR/images/0/0a/Yanjiujinzhan.png")!="")
      {
 
           ...
      }
?>

怎么一直报错啊,帮忙写下代码可以吗?就是这个路径的图片,先测试一张

#1


图片直接按照特定规则生成URI存磁盘就可以了。

#2


 
INSERT INTO `member` ( `xxxx`) VALUES 
(_binary 0x496E6E6F20536574757020556E696E7374616C6C204C6F6720286229000000000000000000000000000000000000000000000000000000000000000000000000486569646953514C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000486569646953514CFF); 

#3


木有人回答了。。如果非存数据库。。你就file_get_content得到串,addslashes之后插入即可,像普通字段一样。

#4



<?
/*
 * 把图片存入mysql数据库
 *
 #
 # 数据表的结构 `images`
 #

CREATE TABLE images (
  picid int(3) NOT NULL auto_increment,
  picdata longblob NOT NULL,
  pictext varchar(100) NOT NULL default '',
  PRIMARY KEY  (picid)
) TYPE=MyISAM;

 */
if(trim($picfile[0])!=""){
    $link=@mysql_connect("localhost","root","root");
    //连接,用你的具体连接名替换root,具体连接密码替换root
        if($link==false) 
           {
     echo "<script>alert('连接数据库时发生错误,请稍后再试!')</script>";
           }
    $res=mysql_select_db("kkk");
        if($res==false) 
           {
     echo "<script>alert('打开数据库时发生错误,请稍后再试!')</script>";
           }
  $tmpset=0;  
  // 存放成功加入的图片数目
  for($i=0;$i<=3;$i++)
      { 
      // picfile[i]存放所提交的图片信息(文件路径)
      if(trim($picfile[$i])!="")
         {
         //读取数据
         $fp=fopen($picfile[$i],"r");
         $picdata=fread($fp,filesize($picfile[$i]));
         fclose($fp);
         //加上必要的标志符号
         $picdata=addslashes($picdata);
         //用具体的数据表名代替images
         //pictext[i]存放所提交的图片的文字说明
         $qu="insert into images(picdata,pictext) values('$picdata','$pictext[$i]')";
         $res=@mysql_query($qu,$link);  
               if($res==false) 
                   {
       echo "<script>alert('图片 ".$i." 提交失败!')</script>";
                   continue;
                   }  
         $tmpset=$tmpset+1;                                 
         }
       }
  echo "<script>alert('操作成功!实际入库图片数 ".$tmpset." 张')</script>";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
<form action="<? echo $PHP_SELF; ?>" method="post" enctype="multipart/form-data" name="form1">
  <input type="file" name="picfile[]">
  文件说明 
  <input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="file" name="picfile[]">
  文件说明
<input type="text" name="pictext[]">
  <br>
  <input type="submit" name="Submit" value="提交">
</form>
</body>
</html>

显示存在mysql中的图片
<? 
/*
 * 显示存在mysql中的图片
 * 在外部用<img src="displayimg.php?picid=1">来调用数据库中的第一张图片
 #
 # 数据表的结构 `images`
 #

CREATE TABLE images (
  picid int(3) NOT NULL auto_increment,
  picdata longblob NOT NULL,
  pictext varchar(100) NOT NULL default '',
  PRIMARY KEY  (picid)
) TYPE=MyISAM;

 */

$link=@mysql_connect("localhost","root","root"); 
mysql_select_db("kkk");
$qu="select picid,picdata from images where picid=$picid"; 
$res=@mysql_query($qu,$link); 
$num=mysql_num_rows($res);
   if($num==0) 
      { 
      print "<br><br><br>";
      print "<p><b>没有这张图片!</b></p>";
      exit();  
      }
$row=@mysql_fetch_row($res);  
header("Content-type:image/");
echo $row[1];
?>

#5


图片先上传,然后在数据库中保存路径!!!

#6


路径怎么保存在picfile[i]中呢?

我试了试固定的路径,貌似不行啊

#7



<?
$DBserver = "localhost";
$DBname = "new";
$DBuser = "root";
$DBpassword = "";

$con = mysql_connect("localhost","root","");
mysql_select_db("new");
      
      if(trim("E:\wamp\www\images\0\0a\Yanjiujinzhan.png")!="")
      {
         
         $fp=fopen("E:\wamp\www\images\0\0a\Yanjiujinzhan.png","r");
         
         $imgdata=fread($fp,filesize($fp));
         
         fclose($fp);
         
         $imgdata=addslashes($imgdata);
         
         $sql="insert into image(img_size) value ('{$imgdata}')";
         $con = @mysql_query($sql);
     mysql_query($sql) or die(mysql_error());
         
      }
?>

#8


1. $imgdata=fread($fp,filesize($fp));
filesize()接受的是一个字符串类型的文件名,而不是一个连接句柄
2. $imgdata=addslashes($imgdata);
二进制数据不需要这样
3.  $con = @mysql_query($sql); 这是什么? 重复插入了已经。

#9


一般不建议将图片保存在数据库中,因为图片都比较大会影响查询的效率
小图片是可以放在库中的,并且隐秘性较好

存放图片数据的字段应使用 blob 类型的,如果用 text 类型就可能出现问题(字符集的原因)
Blob 64K
MediumBlob 16M
LongBlob 4G

在 window 下打开图片文件要用 rb 方式(显式的声明为二进制方式)
使用 file_get_contents 函数要高效的多

另外,即便是在 window 下面,路径符也要用“/”,养成良好的习惯,路子更宽
E:/wamp/www/images/0/0a/Yanjiujinzhan.png

#10


方法上面已经有了

但我只能说从DBA的角度讲,这是非常不推荐,甚至非常忌讳的一种使用方法...

#11




$DBserver = "localhost";
$DBname = "new";
$DBuser = "root";
$DBpassword = "";

$con = mysql_connect("localhost","root","");
mysql_select_db("new");
      
      if(trim("E:/wamp/www/QWR/images/0/0a/Yanjiujinzhan.png")!="")
      {
 
           ...
      }
?>

怎么一直报错啊,帮忙写下代码可以吗?就是这个路径的图片,先测试一张