我想将图像保存到MSsql中的varbinary(max)字段中.
我的控制器中的store方法如下所示:
public function store(Request $request)
{
$vorname = $request->input('vorname');
$nachname = $request->input('nachname');
$file = $request->file('avatar');
$extension = $file->clientExtension();
$fullname = $nachname . "_" . $vorname . "." . $extension;
$file->storeAs('avatars' , $fullname);
$path = storage_path() . "\app\avatars\\". $fullname;
$imageData = unpack("H*", file_get_contents($path));
Mitarbeiter::create([
'PersonalNr' => request('personalnr'),
'Mitarbeiterschluessel' => request('mitarbeiterkey'),
'Vorname' => $vorname,
'Familienname' => $nachname,
'Bild' => $imageData[1]
]);
return view('welcome');
}
sqlSTATE[42000]: [Microsoft][ODBC Driver 11 for sql Server][sql
Server]Die implizite Konvertierung vom nvarchar(max)-Datentyp in
varbinary(max) ist nicht zulässig.
翻译:
Implicit conversion from the nvarchar (max) data type to varbinary
(max) is not allowed.
解决方法:
我遇到了同样的问题,但是我想出了一种使它与Laravel的DB类一起工作的方法.
基本上,就像任何其他语言一样,某些类型不能隐式转换,MSsql的类型也不能隐式转换.这是MSsql所有类型转换的图像.
请注意,从nvarchar到varbinary,您只能进行显式转换.
由于在PHP中您没有“二进制”类型,而只是一个字符串,因此我们无法将其直接存储到MSsql中.为了解决这个问题,我们需要手动/明确地将图像转换为二进制/ varbinary.从binary/varbinary/binary/varbinary开始读取,我们需要在图像上调用CAST或CONVERT.
并且由于我们要执行准备好的语句,因此我们可以说CONVERT(VARBINARY(MAX),?),然后将其绑定到图像值.
DB::statement(
"INSERT INTO files (PersonalNr, Mitarbeiterschluessel, Vorname, Familienname, Bild) VALUES (?,?,?,?,CONVERT(VARBINARY(MAX), ?));", [
request('personalnr'),
request('mitarbeiterkey'),
$vorname,
$nachname,
base64_encode(file_get_contents($path))
]);
请注意,我不执行任何打包操作,而只是执行base64_encode字符串,因为据我所知,您无法轻松地将二进制文件从PHP传递到sql.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。