2016-12-13 71 views
1

我有一個查詢來獲取信息圖片:在上面的HTML我試圖呼應圖像顯示存儲爲BLOB在SQL Server中的圖像

<!-- 
<span class="fa-stack fa-5x has-badge" > 
    <div class="badgesize"> 
    <img src="images/1.png" alt="" > 
    </div> 
</span> 
--> 

現在:

$q4 = "SELECT TOP 3 b.BadgeName, b.BadgeImage FROM BadgeImageTable AS b 
INNER JOIN employee_badge AS e 
ON e.badge_id = b.BadgeID 
WHERE e.employee_id = 2164 
ORDER BY e.earned_on DESC "; 

$stmt3=sqlsrv_query($conn,$q4); 
if($stmt3==false){ 
    echo 'error to retrieve info !! <br/>'; 
    die(print_r(sqlsrv_errors(),TRUE)); 
} 

HTML以前:

<span class="fa-stack fa-5x has-badge" > 

        <div class="badgesize"> 

       <img src=" 

       <?php 

           if($count = sqlsrv_num_rows($stmt3) > 0){ 
            while($recentBadge = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)){ 
            $result[] = $recentBadge; 
            } 

            if($count > 3){ 
            $result = array_rand($result, 3); 
            } 

            foreach($result as $recentBadge){ 
            echo 
             $recentBadge['BadgeName'], 
             '<img src="data:image/png;base64,'.base64_encode($recentBadge['BadgeImage']).'"/>', 
             '<br>' 
            ; 
            } 
           } else { 
            echo 'no results'; 
           } 

       ?> 

          " alt="" > 


          </div> 


     </span> 


</div> 
</span> 

BadgeImage,BadgeID和BadgeName是從那裏我想呼應的 「BadgeImageTable」 列名。

當我在我的DB中使用查詢時,它根據需要獲取數據。 PLz,見下文。 enter image description here

問題:我無法呼應的HTML上述BadgeImage。

我存儲的圖像與下面的查詢:

Insert Into BadgeImageTable(BadgeID, BadgeImage) 
Select '77', BulkColumn 
from Openrowset (Bulk 'C:\Users\mrashidjne\Desktop\diligent.png', Single_Blob) as Image 

目前這是我所看到的,當我嘗試回聲圖像: 111

+0

'數據:BadgeImage/JPEG; base64'應'數據:圖像/'*類型*'; base64'。哪裏類型是什麼圖像存儲,gif,png或w/e。無論哪種方式,或許更簡單的方法是將'blob'類型更改爲'varchar(50)'並存儲路徑。 – Xorifelse

+0

我相應改變 - ', – jane

+0

不幸的是,沒有運氣。 – jane

回答

1

我能找到關於這個問題的唯一的事情問題是,你應該獲取圖像爲二進制:

while(sqlsrv_fetch($stmt3)){ 
    $result[] = [ 
    'name' => sqlsrv_get_field($stmt3, 0), 
    'img' => sqlsrv_get_field($stmt3, 1, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY)) 
    ]; 
} 

有了這個你HOULD能夠顯示圖像:

function blob2image($mime, $blob){ 
    ob_start(); 
    header("Content-type:$mime"); 
    echo $blob; 
    return ob_get_contents(); 
} 

$mime = 'image/png'; 
foreach($result as $row){ 
    echo $row['name']; 
    echo '<img src="data:'.$mime.';base64,'.base64_encode(blob2image($mime, $row['img'])).'"/>'; 
} 

我不能肯定地說這工作,因爲我沒有測試能力,我無法找到關於這個問題的大量信息,以及。


的替代方式是存儲圖像爲:

  1. Base64編碼文本
  2. 存儲圖像的

無論哪種方法需要改變列DATA-路徑如果要存儲路徑,請將BadgeImage的類型設置爲編碼圖像的textvarchar

$file = 'C:\Users\mrashidjne\Desktop\diligent.png'; 
#$file = 'images/1.png'; // or store path relative to webroot and echo image as normally. 
$mime = mime_content_type($fn); 
$img = base64_encode(file_get_contents($fn)); 
$src = "$data:$mime;base64,$img" 

$sql = "INSERT INTO BadgeImageTable (BadgeName, BadgeImage) VALUES ('diligent', '$src')"; 

現在同時印刷,它應該是一樣容易:

echo '<img src="'.$row['BadgeImage'].'"/>';