php - SQL सर्वर में ब्लॉब के रूप में संग्रहीत छवि प्रदर्शित करें



html sql-server (1)

जानकारी की छवियों को लाने के लिए मेरे पास एक प्रश्न है:

$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="images/1.png"  alt=""   >
  </div>
</span> 
-->

अब ऊपर के 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" में स्तंभ नाम हैं, जहां से मैं गूंजने का प्रयास कर रहा हूं।

जब मैं अपने डीबी में पूछताछ का उपयोग करता हूं तो वांछित के रूप में डेटा प्राप्त करना पीएलजे, नीचे देखें।

समस्या: मैं एचटीएमएल में ऊपर वाले बैजआईमेज को गूंजने में असमर्थ हूं।

मैंने निम्न प्रश्न के साथ छवि को संग्रहीत किया है:

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

वर्तमान में यह मैं देख रहा हूं जब मैं छवि को गूंजने का प्रयास करता हूं:


इस मुद्दे के बारे में केवल एक चीज मिल सकती है कि आपको छवि को बाइनरी के रूप में लाया जाना चाहिए:

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

इसके साथ आपको छवि प्रदर्शित करने में सक्षम होना चाहिए:

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. बेस 64 एन्कोडेड टेक्स्ट
  2. छवि का पथ स्टोर करें

या तो विधि को BadgeImage के कॉलम डेटा-प्रकार को एन्कोडेड छवियों या text लिए text बदलने की आवश्यकता होती है यदि आप पथ को संग्रहीत करना चाहते हैं।

$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'].'"/>';




sql-server-2012