PHP MySQL Сохранение двоичной строки в поле BLOB не может получить двоичное значение

Я пытаюсь сохранить строку в двоичном формате, чтобы сэкономить место в моей базе данных MySQL. Однако я не могу правильно получить двоичные данные, так что я делаю не так?

У меня есть база данных, как:

CREATE TABLE `Test` (
ID INT NOT,
Value BLOB
);

Я вставляю данные с такими утверждениями, как:

INSERT INTO `Test` (ID, Value) VALUES(1, b'10000001');

Однако я не могу получить двоичную строку, когда выбираю значение из вставленной строки с помощью нижнего запроса:

SELECT * FROM `Test`; //NOT WORKING. Returns Value=0
SELECT ID, BIN(Value) FROM `Test`; //NOT WORKING. Returns Value=0

Что я должен использовать? Я уже пытался использовать BIN(Value) в моем запросе, как показано выше, но безуспешно. Заранее спасибо.

0

Решение

Начинать с буквальной строки единиц и нулей невероятно странно, но:

$ones_and_zeroes = '10000001';

// If you have a literal string of ones and zeroes that you need to convert
// to an actual number there's base_convert()

$hex_string = base_convert($ones_and_zeroes, 2, 16);

// $hex_string is now "81"
// you can convert this to an *actual* binary string with hex2bin()
$bin = hex2bin($hex_string);

// $bin now contains the byte 0x81

// now if you want to do it right:
$dbh = new PDO( ... );
$stmt = $dbh->prepare('INSERT INTO `Test` (ID, Value) VALUES(1, :bin)');
$stmt->execute(['bin'=>$bin]);

// or whatever the gross mysqli equivalent is.

Я не собираюсь показывать вам, как это сделать неправильно в PHP, но вы хотели написать этот запрос от руки:

INSERT INTO `Test` (ID, Value) VALUES(1, 0x81);

Данные в шестнадцатеричном формате с префиксом «0x» являются единственным безопасным способом [который мне известен] для встраивания двоичных данных в текстовый запрос, хотя СУЩЕСТВЕННО предпочтительнее использовать подготовленные операторы, когда это возможно, так как данные шестнадцатеричного кодирования, подобные этому, удваивают длина.

1

Другие решения

Лучший совет — проверить, успешно ли выполнен запрос вставки, то есть ожидаемые данные вставлены в БД, используя любой инструмент администрирования MySQL.
Только тогда вы сможете определить, связана ли проблема с поиском или с самими вставками.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector