如果一个图片直接存在数据库中,可以用以下方法读出来。
环境
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');