PHP:无法将转换后的二进制值保存到SQL Server数据库(隐式转换错误)
我试图以二进制格式将图像写入SQL Server数据库,但没有成功。从我的前端(AngularJS)上传到我的服务器(PHP)的图像是一个PHP:无法将转换后的二进制值保存到SQL Server数据库(隐式转换错误),php,sql-server,laravel,binary,varbinarymax,Php,Sql Server,Laravel,Binary,Varbinarymax,我试图以二进制格式将图像写入SQL Server数据库,但没有成功。从我的前端(AngularJS)上传到我的服务器(PHP)的图像是一个Base64字符串,然后我需要将其转换为原始二进制文件,从0x开始,因为数据库需要varBinary(max)数据类型 我尝试的一切似乎都以单引号包装的值结束,因此尝试将其解析为varchar并导致错误: 一般错误:20018不允许从数据类型varchar(max)隐式转换为varbinary(max) 我当前的代码段: $img=(二进制)'0x'.strt
Base64
字符串,然后我需要将其转换为原始二进制文件,从0x
开始,因为数据库需要varBinary(max)
数据类型
我尝试的一切似乎都以单引号包装的值结束,因此尝试将其解析为varchar并导致错误:
一般错误:20018不允许从数据类型varchar(max)隐式转换为varbinary(max)
我当前的代码段:
$img=(二进制)'0x'.strtoupper(bin2hex($photo['PhotoImage'])代码>
似乎总是单引号的结果,我不知道如何绕过它:
PhotoImage='0x6956424F5277304B47676F141414E5356845567414156414146514341444D67336B464'
更新
经过一番周旋,我找到了我的问题,我只是不知道如何解决它
本声明:
$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>
...
。。。
“字符串”
Sfdump(“sf-dump-1548954697”)
...
此外,作为一个小测试,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>" */
$img=5;
dd(gettype($img));
/*“整数”*/
$img=(二进制)5;
dd(gettype($img));
/*“字符串”*/
如何强制PHP将此值转换为真正的二进制文件?您使用什么扩展名连接到SQL Server?如果文件到达服务器时是base64编码的二进制文件,您不能简单地使用base64_decode()?您是否尝试过将base64数据解码为(二进制)文件
value,然后在准备好的语句中使用\PDO::PARAM_LOB
数据类型指定二进制值?@Zhorov我使用了Laravel的内置连接器和PDO_dblibdriver@Snake14从前端进入服务器的文件如下所示:/9j/4AAQSkZJRgABAQEAYABgAAD//gA7Q1JFQVRPUjogZ2Q……….jOI8RIxn/AH4//9k=