Как сохранить и получить изображение в SQL Server VARBINARY (MAX) тип данных

#php #sql #sql-server #sql-server-2008

#php #sql #sql-сервер #sql-server-2008

Вопрос:

Я сохранил изображение в базе данных SQL, поле изображения типа данных varbinary (max) следующим образом.

 $image = "baby.jpg";
$type = pathinfo($image, PATHINFO_EXTENSION);
$data = file_get_contents($image);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
$insert = "insert into logoType(image)values(?)";
$param = array($base64);
$sql = sqlsrv_query($dbhandle, $insert, $param ) or die( print_r(sqlsrv_errors()) ); 
  

Часть вставки выполнена успешно. Теперь, как я могу получить сохраненное изображение из базы данных и отобразить его на веб-странице с помощью php. Я попробовал следующий метод, но продолжал получать сообщение об ошибке: «Изображение не может быть отображено, поскольку оно содержит ошибки».

 header('Content-Type: image/x-bmp');
echo $image;
  

Как изображение может отображаться на веб-странице с использованием php с данными, хранящимися в БД?. Пожалуйста, руководство. Заранее спасибо.

Ответ №1:

Вы преобразовали изображение в Base64 перед сохранением, поэтому вам следует преобразовать его обратно, а затем использовать echo .

Ответ №2:

 <?php
  		$serverName = "server";
		$uid = "user";
		$pwd = "pass";
		$connectionInfo = array( "UID"=>$uid,
								 "PWD"=>$pwd,
								 "Database"=>"database");
		$conn = sqlsrv_connect( $serverName, $connectionInfo);
		
		if( $conn === false ){
			 echo "Unable to connect.</br>";
			 die( print_r( sqlsrv_errors(), true));
		}
		
			$fotoquery = "SELECT column_image FROM Table WHERE Column = 'xxxxxxxxxx'";
			$stmt = sqlsrv_query( $conn, $fotoquery);
	
	  	if( $stmt === false ){
           echo "Error in executing query.</br>";
           die( print_r( sqlsrv_errors(), true));
        }
	   
			$dataImage = sqlsrv_fetch_array($stmt);
			$varimg = base64_encode($dataImage[0]);
			$data = base64_decode($varimg);
	        $im = imagecreatefromstring($data);
			
		if ($im !== false) {
			header('Content-Type: image/png');
			imagepng($im);
			imagedestroy($im);
		}
		else {
			echo 'An error occurred.';
		}
?>