Intereting Posts
Шифрование данных элемента с помощью ключевых файлов TCPDF ERROR: некоторые данные уже выведены, не удается отправить файл PDF Предупреждение: mysqli_num_rows () ожидает, что параметр 1 будет mysqli_result, boolean задан в сопоставить две строки и сравнить каждую букву в php Как удалить переменную из массива сеансов PHP Отображение изображений из папки с помощью PHP Нужно ли иметь wsdl-файл для создания веб-службы в php? Найти наивысшее простое число в заданном диапазоне Заголовки $ _SERVER отсутствуют в PHP, но присутствуют в Python Сглаживание многомерных массивов, объединяющих ключи Как создавать резервные копии файлов из определенного каталога в Dropbox с помощью PHP? PHP xpath – найти элемент со значением, а также получить элементы до и после элемента Ошибка PHP: вызов функции-члена rowCount () для объекта без объекта Отправьте форму php и покажите ее результат на div без перезагрузки страницы Что означает этот синтаксис (page = $ page? $ Page: 'default') в PHP?

Двоичные данные не сохраняются должным образом в MySQL

Я хочу сохранить строку base64_encoded как двоичные данные. Поэтому используйте base64_decode () в строке перед вставкой в ​​поле LONGBLOB в MySQL. Пока все хорошо, однако, когда я извлекаю данные из MySQL, я не могу сгенерировать правильную строку base64_encoded, которую я начал с …

Как это возможно? заранее спасибо

РЕДАКТИРОВАТЬ

Сохраненные данные представляют собой зашифрованную строку с помощью процедуры шифрования AES-256CBC OPENSSL.

КОД

Для моего кода я использую OpenSSL для шифрования строки

$string = "Test"; $IV = "1234567890123456"; $key = "12345678901234561234567890123456"; $encrypted = openssl_encrypt($string, "AES-256-CBC", $key, false, $IV); $encrypted string is stored in LONGBLOB field by $sql_insert_data = $mysqli->prepare("INSERT INTO `TBLName` (String) Values(?)"); $sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted)); //Thereafter, it is retrieved by a select statement $decrypted = openssl_decrypt($row['String'], "AES-256-CBC", $key, true, $IV); 

Когда я делаю base64_encode в строке и сохраняю это как значение TEXT в БД, это работает. Однако, когда я этого не делаю, вышесказанное не работает …

благодаря

Вы неправильно используете подготовленные инструкции:

 $sql_insert_data->bind_param('s', $mysqli->real_escape_string($encrypted)); ^^^^^^^^^^^^^^^^^^ :-! 

Ваш код добавит случайную обратную косую черту в двоичный поток. Вам вообще не нужен real_escape_string() .

«Проклятый сын, вопрос в том, как я успешно оптимизирую хранение данных base64_encoded в mysql. Вот и все». – См. https://stackoverflow.com/a/42080296/1766831