php - 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 将此值转换为真正的二进制文件?
解决方案
推荐阅读
- python - 如何在 GPU 上处理字符串操作?
- progressive-web-apps - 新的更新可用消息和发布操作
- node.js - 超测附件:不支持的媒体类型:multipart/form-data;
- node.js - nginx 无法代理来自 node.js 应用程序的错误
- asp.net-core - 如何集成测试 SoapCore 端点?
- swiftui - 从 Observer 或外部 View 调用 ScrollView 的 scrollTo
- node.js - 电子辅助窗口不加载 HTML 文件
- flutter - 颤振的网络套接字
- python - 基于另一幅掩模图像测量掩模图像中多个点的宽度
- flutter - 按下底部颤动时显示警报