Php 如何使用PEAR在SQL Server中保存二进制数据

Php 如何使用PEAR在SQL Server中保存二进制数据,php,pear,Php,Pear,如何使用PEAR DB库和SQL向SQL“Image”字段插入,如下所示: insert into MyTable (myBlob) values (BlobData) "BMN\x0\x0\x0\x0\x0\x0\x06\x0\x0\x0(\x0\x0\x0\x2\x0\x0\x0\x3\x0\x0\x0\x1\x0\x18\x0\x0\x0\x0\x0\x18\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0ÿÿÿÿÿÿ\x0

如何使用PEAR DB库和SQL向SQL“Image”字段插入,如下所示:

insert into MyTable (myBlob) values (BlobData)
"BMN\x0\x0\x0\x0\x0\x0\x06\x0\x0\x0(\x0\x0\x0\x2\x0\x0\x0\x3\x0\x0\x0\x1\x0\x18\x0\x0\x0\x0\x0\x18\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0ÿÿÿÿÿÿ\x0\x0\x0\x0ÿÿÿÿ\x0\x0ÿÿÿÿÿÿ\x0\x0"
其中BlobData是使用file_get_内容获取的,如下所示:

insert into MyTable (myBlob) values (BlobData)
"BMN\x0\x0\x0\x0\x0\x0\x06\x0\x0\x0(\x0\x0\x0\x2\x0\x0\x0\x3\x0\x0\x0\x1\x0\x18\x0\x0\x0\x0\x0\x18\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0ÿÿÿÿÿÿ\x0\x0\x0\x0ÿÿÿÿ\x0\x0ÿÿÿÿÿÿ\x0\x0"
我得到语法错误,猜测我需要以某种方式转义数据。Php代码:

$data = file_get_contents('c:\\temp\\test.bmp');
$sql = "insert into MyTable (myBlob) values ('".$data."'); //just using inline sql for now to get it working
$db->query($sql);

我发现使用bin2hex并将二进制数据作为十六进制字符串写入可以工作:

$FileDataBin = file_get_contents($myFile);
$FileDataHex = '0x'.bin2hex($FileDataBin);

$qry = 'update MyTable set SomeBinaryField = '.$FileDataHex.' where SomeOtherField=?';
$DB->query($qry, array('some data'));

请注意“0x”前缀,并且数据周围没有引号。

请显示您的PHP代码我已编辑以显示用于存储二进制文件(如图像)的代码您应该使用另一个存储,例如-MogileFS。它比从db中选择字段更好。此外,web服务器非常适合缓存图像。在尝试执行二进制文件之前,您是否尝试转义该文件的内容?由于遗留代码的原因,我必须使用SQL“Image”数据类型。