2014-04-17 107 views
1

我有问题显示图像存储在数据库中作为一个blob。我在很多论坛搜索过,但找不到任何答案。不显示斑点图像

我把代码分成两个文件。在index.php我插入图像,并尝试从get_image.php文件加载它。

这里是index.php文件

<form action="index.php" method="POST" enctype="multipart/form-data"> 
        File: 
        <input type="file" name="image"> <input type="submit" value="upload"> 
       </form> 

       <?php 
        $file = $_FILES['image']['tmp_name']; 

        if(!isset($file)){ 
        echo "Please select an image."; 
        } 

        else{ 
        $image_name = mysql_real_escape_string($_FILES['image']['name']); 
        $image = mysql_real_escape_string(file_get_contents($_FILES['image']['tmp_name'])); 
        $imageType = mysql_real_escape_string($_FILES['image']['type']); 
        $image_size = getimagesize($_FILES['image']['tmp_name']); 


        if($image_size == FALSE){ 
         echo "That's not an image"; 
        } 
        else{ 
         if (!$insert = mysql_query("UPDATE 'table_name' SET `image` = '$image' WHERE 'row_name' = '$student_id'")){               
         echo "Problem updating image"; 
         } 

         else{              
         echo "<img src=get_image.php>"; 
         } 

        } 
        } 
       ?> 

而且get_image.php

<?php 

     $query = mysql_query("SELECT image FROM table_name WHERE student_id = 51686"); 
     while($row= mysql_fetch_assoc($query)){ 
      $imageData = $row['image']; 
     } 

     header("Content-type: image/png"); 
     echo $imageData;   
?> 

谁能帮助请。我的PHP版本是5.2在输出有图像图标,但没有图像。如果我右键单击并尝试将其另存为图像,它不是图像格式,它保存为get_image.php。所以我不知道是什么问题。

+0

尝试更改内容类型为文本/平原和打开图像url直接。查找png代码前面的空格和错误消息。 (你有没有连接你的dbms,并在get_image.php中选择了一个数据库?) – urzeit

+0

@urzeit更改为text/plain没有差异,没有得到你,如何打开直接在Blob中的图像,我从db中获取它,自动地,png代码以“?Jw?= wf?yf?y?)?”开始。是的,我连接我的数据库在get_image.php – Tracker7

+0

从这里我们可以看到,数据是不是有效的png(它以'\ 211PNG'开头。所以我们必须看你存储和加载到你的数据库。 – urzeit

回答

0
$pdo = new PDO('mysql:dbname=database_name;host=localhost', 'username', 'password', 
     array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')); 

     $imageName = mysql_real_escape_string($_FILES["image"]["name"]); 
     $imageData = file_get_contents($_FILES["image"]["tmp_name"]); 
     $imageType = mysql_real_escape_string($_FILES["image"]["type"]); 

     $stmt = $pdo->prepare('INSERT INTO image (name,image) VALUES (:name,:image)'); 
     $stmt->bindParam(':image', $imageData, PDO::PARAM_LOB); 
     $stmt->bindParam(':name', $imageName); 
     $stmt->execute(array('name' => $imageName, 'image' => $imageData)); 
     echo "Image Uploaded"; 


     $res = mysql_query("SELECT * FROM image "); 
     while ($row = mysql_fetch_assoc($res)) 
     {             
     echo "<img src=data:image/jpeg;base64," . (base64_encode(($row['image']))) . " style='width:60px;height:60px;'>"; 
     } 
0

请尽量像这样插入记录如下

$tmpImageName=$_FILES['files']['tmp_name']; 
$handle  = fopen($tmpImageName, 'r'); 
$content = fread($handle, filesize($tmpImageName)); 
fclose($handle); 

$sql='insert into imagetest(image)values("'.mysql_escape_string($content).'")'; 

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

,然后尝试像这里显示的图像

$res = mysql_query("SELECT * FROM imagetest"); 
while ($row = mysql_fetch_assoc($res)) { 
    echo "<img src=data:image/jpeg;base64," . (base64_encode(($row['image']))) . " >"; 
    } 
+0

已经尝试过,还是没有结果 – Tracker7

+0

可以请 尝试使用phpMyAdmin使用插入记录 上传mysql中的图像,并尝试这个代码 我已经试过 但也只是等待秒我有另一种解决方案 –

+0

仍然是相同的结果 – Tracker7