从MySql中检索并显示图像

时间:2014-03-31 04:32:49

标签: php mysql image

我已成功将图像存储在mySql中。我想要检出并在网站上显示一个能够放大它的href按钮。

这是我的数据库表结构

-- Table structure for table `poster`
--

CREATE TABLE `image` (
  `img_id` int(11) NOT NULL auto_increment,
  `img_name` varchar(32) NOT NULL,
  `img` blob NOT NULL,
  `img_type` varchar(32) NOT NULL,
  `img_size` int(255) NOT NULL,
  PRIMARY KEY  (`img_id`)
)

放置显示图像

<div class="col-md-5 text-dimension">
        <?php
            $con=mysql_connect("localhost","root","");
            mysql_select_db("isiti");

            if (mysqli_connect_errno($con))
             {
                echo "Failed to connect to MySQL: " . mysqli_connect_error();
             }

            $result = mysql_query("SELECT * FROM poster ORDER BY year DESC LIMIT 0, 5000");
                while($row = mysql_fetch_array($result))
                {
                    $id=$row['img_id'];
                    echo '<a href="img_disp.php?image_id='.$id.'" data-lightbox="image-1" title="©ISITI-CoERI"><center><img src="img_disp.php?image_id='.$id.'" alt="poster1" width="200" height="250"><br></a><br><br>';
                    echo '<span class=right><a href="edit_form.php?id='.$id.'">[edit]</a>
                    <a name="delete" id="delete" href="public_delete.php?id='.$id.'">[delete]</a></span>';
                }
        ?>

这是img_disp.php

<?php

   // Connect to the database
        $host="localhost"; // Host name 
        $username="root"; // Mysql username 
        $password=""; // Mysql password 
        $db_name="isiti"; // Database name 
        $tbl_name="poster"; // Table name 

        $conn = mysql_connect("$host", "$username", "$password"); 
        if(! $conn )
        {
          die('Could not connect: ' . mysql_error());
        }
        if (isset($_GET["image_id"]) && !empty($_GET["image_id"])) 
            {                           
                $id =$_GET["image_id"];
            }

        mysql_select_db($db_name);

  $sql="SELECT * from poster where id='$id'";

  $query=mysql_query($sql) or die(mysql_error());

  while($result=mysql_fetch_array($query)){     
    header('Content-type:'.$result['img_type'].'');
    echo $result['img'];
    header('Content-Disposition: inline; filename="'.$result['img_name'].'"');      
  }
?>

问题是......图像没有显示出来。两者或弹出。

2 个答案:

答案 0 :(得分:0)

我认为问题是你正在使用echo,它意味着处理字符串。您也可以考虑使用其他方式来存储图像,而不是使用mysql。无论如何,正确的方法是打开文件流,然后将数据放入其中。此外,您还需要一个单独的文件来处理图片,因为您只能更改整个文件的标题。这意味着您需要一个文件来为图片创建一个显示页面,另一个文件用于提取图片。

$write=fopen("php://output","w");
fwrite($write,$results['img']);
fclose($write);

另外,我不确定你的结构是否适合mysql结果。

答案 1 :(得分:0)

我建议将所有图像存储在磁盘[文件系统]而不是MySQL中。 您还可以加密图像并将其存储在.dat文件中。这将确保您的图像安全。

在MySQL中只存储该特定图像的路径。从MySQL检索记录时

go to the image path
get image
decrypt it (Optional, Only if you have encrypted it before)
and display the image..