如何用PHP显示Blob?

时间:2019-01-18 20:03:52

标签: php mysql

为什么我的php无法显示图像?

<?php
  include("sql.php");
  //$sql = "SELECT * FROM filesdb WHERE fileid = 5";
  $id = $_GET['id'];
  // do some validation here to ensure id is safe
  $sql = "SELECT * FROM filesdb WHERE fileid =$id";
  echo $sql."<br>";
  $result = $conn->query($sql);

  if ($result->num_rows > 0) {

     while($row = $result->fetch_assoc()) {

        //header('content-type: image/jpeg');

        echo  "<br>Fileid:".$row['fileid'];
        echo  "<br>FileName:".$row['filename'];
       header("Content-Type: image/jpeg");
       echo "<br>".$row['dbforfile'];
     }

它可以显示fileidfilename,但不能显示dbfofile,这是BLOB。

2 个答案:

答案 0 :(得分:0)

如果要下载文件内容,则不得在其周围放置HTML元素。

您一次也只能发送一张图片,因此循环播放毫无意义。

<?php
include("sql.php");
//$sql = "SELECT * FROM filesdb WHERE fileid = 5";
$id = $_GET['id'];
// do some validation here to ensure id is safe
$sql = "SELECT dbforfile FROM filesdb WHERE fileid =$id";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
    header('content-type: image/jpeg');
    $row = $result->fetch_assoc();
    echo $row['dbforfile'];
}

答案 1 :(得分:0)

您只需要制作一张图片,因此不需要循环。但是,如果您想做倍数;您需要使用img标签并调用另一个PHP脚本,就像它是src中的图像一样,并让该脚本输出该图像(带有标题)。或者,您可以将base64编码的data用作标记中的图像源:

 while($row = $result->fetch_assoc()) {    
     echo "<br>Fileid:".$row['fileid'];
     echo "<br>FileName:".$row['filename'];
     echo "<br>";
     echo '<img src="data:image/jpeg;base64,'.base64_encode($row['dbforfile']).'"/>';
 }