如果一个图片直接存在数据库中,可以用以下方法读出来。

环境

ThinkPHP 5.1 ,sqlsrv,pdo_sqlsrv

代码

//pdo 方式
$pdo=new PDO('sqlsrv:Server=localhost;Database=SD31022_Sample', 'sa', 'Sql2008');
$stmt=$pdo->prepare('select picture from crm_affixinfo where id=115');
$stmt->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY); //指定二进制方式
$stmt->execute();
$row=$stmt->fetchObject(); //测试表明,直接fetch不成功
$image=$row->picture;
return response()->data($image)->header('Content-Type', 'image/png');
// 非pdo方式
$conn=\sqlsrv_connect('(local)', ['Database'=>'SD31022_Sample']);
$tsql='select picture from crm_affixinfo where id=115';
$stmt=\sqlsrv_query($conn, $tsql);
\sqlsrv_fetch($stmt);
$image=\sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY));
return json(\fpassthru($image))->header('Content-Type', 'image/png');
// DB 方式
$data=Db::table('crm_affixinfo')->where('id', 115)->find();
return response()->data(\hex2bin($data['picture']))->header('Content-Type', 'image/jpg'); //数据库中以十六进制存的,转成二进制就可以了
// 模型方式
$goods=GoodsModel::get(1);
$image=$goods->img;
return response()->data(\hex2bin($image))->header('Content-Type', 'image/jpg');

本文由 yang 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论