微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-如何使用Laravel 5. *将二进制数据插入SQL

我想将图像保存到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所有类型转换的图像.

enter image description here


请注意,从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 举报,一经查实,本站将立刻删除。

相关推荐