PHP - MySQL: хранение изображений в DB - избегание специальных персонажей

StackOverflow https://stackoverflow.com/questions/4569745

Вопрос

Я прочитал этот урок о хранении изображений в БД. В учебном пособии автор избегает специальных символов в бинарных данных перед вставкой: http://www.phpriot.com/articles/images-in-mysql/7 ( с использованием addslashes несмотря на то что mysql_real_escape_string предпочтительнее - но это еще одна проблема).

Дело в том, что при отображении он просто отображает данные при хранении: http://www.phpriot.com/articles/images-in-mysql/8

Мои вопросы:

1) Нужно ли избежать специальных символов даже для бинарного типа поля (blob)?

2) Если да, то нам не нужно снова «развлекать» символов, чтобы правильно отобразить изображение? (Если да, то как лучше всего это сделать. Любые комментарии об эффективности? Для больших изображений: сбежать и развлечение могут быть большими накладными расходами?).

Или не то, что мое понимание сбежания совершенно неправильно (и сбежание только влияет на запрос, а не на конечные данные, вставленные/хранящиеся?).

Благодарность

JP

Это было полезно?

Решение

Ваше понимание сбега неверно. Данные, вставляемые в базу данных, избегаются, так что анализатор запроса видит информацию как предполагаемой.

Возьмите строку "Жан-Люк" Эрл Грей "Пикард". Выбегая результаты в: 'Jean-Luc \'Earl Grey\' Picard'

Когда MySQL получает это, он понимает, что сбежавшие цитаты должны быть взяты буквально, это то, что означает «Выход», и будет хранить их в базе данных. Он не будет хранить экономные характеристики в базе данных. Указывает на MySQL, что он должен забрать персонажа, следующий за ним буквально.

При получении данные представлены в вашем приложении без уходящих символов, поскольку они удаляются при анализе запроса.

Другие советы

1) Нужно ли избежать специальных символов даже для бинарного типа поля (Blob)?

Да потому, что mysql_real_escape_string() (который действительно является тем, кто использует) обеспечивает защиту от атак SQL -инъекций, которые также могут легко находиться в файле изображения. Любой Произвольные данные, которые вы подаете в базу данных, должны сначала дезинфицировать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top