首页 > 解决方案 > PHP:无法将转换后的二进制值保存到 SQL Server 数据库中(隐式转换错误)

问题描述

我试图以二进制格式将图像写入 SQL Server 数据库,但没有成功。从我的前端(AngularJS)上传到我的服务器(PHP)的图像是一个Base64字符串,然后我需要将其转换为原始二进制文件,0x因为数据库需要一个varBinary(max)数据类型。

我尝试的一切似乎都以单引号括起来的值结束,因此试图将其解析为 varchar 并导致错误:

一般错误:20018 不允许从数据类型 varchar(max) 到 varbinary(max) 的隐式转换。

我当前的代码片段:

$img = (binary) '0x'.strtoupper(bin2hex($photo['PhotoImage']));

似乎总是用单引号导致,我不知道如何解决它:

PhotoImage='0x6956424F5277304B47676F414141414E53556845556741414156414141414651434141414141444D67336B464'

更新

经过一番玩耍,我找到了我的问题,我只是不知道如何解决它。

这个说法:

$img = (binary)('0x' . bin2hex($photo['PhotoImage']));
dd(gettype($img));

哪个(对我来说)应该返回一个二进制值,实际上仍然返回一个字符串,因此为什么我的 S-PROC 失败了:

...
"<span class=sf-dump-str title="6 characters">string</span>"
</pre><script>Sfdump("sf-dump-1548954697")</script>
...

此外,作为一个小测试,PHP 似乎无法声明真正的二进制文件:

$img = 5;
dd(gettype($img));

/* "<span class=sf-dump-str title="6 characters">integer</span>" */

$img = (binary)5;
dd(gettype($img));

/* "<span class=sf-dump-str title="6 characters">string</span>" */

如何强制 PHP 将此值转换为真正的二进制文件?

标签: phpsql-serverlaravelbinaryvarbinarymax

解决方案


推荐阅读