Как сохранить двоичные данные в SQL Server с помощью PEAR

Как мне сделать вставку в поле «Изображение» SQL, используя библиотеку PEAR DB и 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);

person A_L    schedule 10.06.2014    source источник
comment
пожалуйста, покажите свой PHP-код   -  person Mikpa    schedule 10.06.2014
comment
Я отредактировал, чтобы показать свой код   -  person A_L    schedule 10.06.2014
comment
для хранения бинарных файлов типа изображений следует использовать другое хранилище, например MogileFS. Это лучше, чем выбрать поле из БД. Кроме того, веб-серверы прекрасно кэшируют изображения.   -  person Victor Perov    schedule 10.06.2014
comment
Вы пытались экранировать содержимое двоичного файла, прежде чем пытаться его выполнить?   -  person scragar    schedule 10.06.2014
comment
Я должен использовать тип данных SQL «Изображение» из-за причин устаревшего кода.   -  person A_L    schedule 10.06.2014
comment
Экранирование следующим образом: BMN\\x0\\x0... тогда мой sql не падает с ошибкой синтаксиса, но данные повреждаются, когда я пытаюсь просмотреть файл. Я подозреваю, что мне нужны данные в каком-то другом формате для использования с типом данных «Изображение» в SQL Sever?   -  person A_L    schedule 10.06.2014


Ответы (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» и отсутствие кавычек вокруг данных.

person A_L    schedule 10.06.2014