【问题标题】:How save binary data in SQL Server with PEAR如何使用 PEAR 在 SQL Server 中保存二进制数据
【发布时间】:2014-06-10 22:11:03
【问题描述】:

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

insert into MyTable (myBlob) values (BlobData)

其中 BlobData 是使用 file_get_contents 获得的,如下所示:

"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);

【问题讨论】:

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

标签: php pear


【解决方案1】:

我发现使用 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”前缀,并且数据周围没有引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2016-08-26
    • 2010-10-15
    • 1970-01-01
    相关资源
    最近更新 更多