从SQL数据库返回图像

时间:2015-06-08 13:32:03

标签: php sql odbc

我使用odbc连接连接到SQL服务器。我需要显示以下所有字段:

  • 名称: ID
    输入: tinyint
  • 名称: GroupId
    类型: smallint
  • 姓名:照片类型:图片

我使用下面显然不起作用的代码:

<?php

$serverName = "TESTSERV\SQLEXPRESS"; //serverName\instanceName
$database = "test";
$user = "sa";
$password="@r@g0nSQLS@";
$DSN_TEST="TESTSERV - TEST";
$DSN_InetDb="TESTSERV - InetDb";
$DSN_taclog="TESTSERV-TACLOG";
$DSN_general="odbc-test";
$conn_TEST = odbc_connect ($DSN_TEST, $user, $password);
$conn_InetDb = odbc_connect($DSN_InetDb, $user, $password);
$conn_taclog = odbc_connect($DSN_taclog, $user, $password);
$conn_general=odbc_connect($DSN_general, $user, $password);

//confirming connectivity
if ($conn_general){
    echo ('Connected'.'<br>');
}
else{
    echo ('Not connected');
}
$sql = "SELECT * FROM InetDb.dbo.IndivImages WHERE IndivNdx = 30";
$sql_run = odbc_exec($conn_general,$sql);
$row = odbc_fetch_array($sql_run,3);
echo'<img src="data:image/jpeg;base64,'.base64_encode($row['UserImage']).'">';
?>

执行此代码时,图像将被一大块字符替换。 我如何能够返回图像而不是随机字符?

提前致谢, Ĵ

1 个答案:

答案 0 :(得分:0)

如果您只是回显出已存储在数据库中的二进制(或base64编码)数据,那么您将无法获得实际图像。您只是将原始数据脱口而出。

如果您的图像存储为二进制数据,则需要通过输出图像标题的脚本将其提供 - 例如header('Content-Type: image/jpeg'); - 然后回显原始数据。然后你会链接到它,例如为<img src="imager.php?img_id=124123123..." />。您可以在脚本和&#34; imager&#34;之间传递数据。例如超过$_SESSION变量。

如果您的图像存储为base64编码数据(或者您即时转换原始数据),您也可以使用<img src="data:image/jpeg;base64,foBar1Nwht3v5R..." />。请注意,这并不完全是带宽友好的,并且最好保留用于图标等而不是大图像文件。

第三个选项是简单地将图像数据写入文件系统,然后使用标准的img标记链接到它。这样可以使您的图像更容易缓存。 (有很多方法可以确保使用上述选项进行缓存,但是如果不重用它们,甚至可以将它们写出来,甚至可以是一个更简单的方法,也可以节省一些数据库性能。)