Как да запазите двоични данни в 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. По-добре е от избора на поле от db. Освен това уеб сървърите са добри за кеширане на изображения   -  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