2010-12-31 3 views
4

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

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

Мои вопросы:

1) необходимо, чтобы экранировать специальные символы даже для бинарного типа поля (blob Do) ?

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

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

благодаря

JP

ответ

5

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

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

Когда MySQL принимает это, он понимает, что избежавшие цитаты должны быть приняты в буквальном смысле, то есть то, что спасаясь средства, и хранить их в базе данных. Он не будет хранить escape-символы в базе данных. \ Указывает на MySQL, что он должен следовать за символом, следуя за ним буквально.

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

+0

Спасибо! Решает мои сомнения. –

+0

Добро пожаловать :) – kander

1

1) нам нужно экранировать специальные символы даже для бинарного типа поля (BLOB) ли?

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

+0

Спасибо Pekka. Думаю, нам нужно unescape перед отображением? И любые мысли об эффективности? Просто из-за этого escape-unescape я переосмыслил, хранить ли мои миниатюры изображений в базе данных. –

+0

@ JP19 см. Http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay для обсуждения –

Смежные вопросы