Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:无法将转换后的二进制值保存到SQL Server数据库(隐式转换错误)_Php_Sql Server_Laravel_Binary_Varbinarymax - Fatal编程技术网

PHP:无法将转换后的二进制值保存到SQL Server数据库(隐式转换错误)

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

我试图以二进制格式将图像写入SQL Server数据库,但没有成功。从我的前端(AngularJS)上传到我的服务器(PHP)的图像是一个
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=