Проблема с содержимым файла PHP MYSQL - PullRequest
2 голосов
/ 07 декабря 2009

Я пытаюсь загрузить файл .pdf в базу данных mysql, используя php.

Это все хорошо, за исключением содержимого файла. Как бы я ни пытался экранировать специальные символы, запрос всегда терпит неудачу, в основном с помощью «Неизвестная команда \ n».

Я использовал addlashes, mysql_real_escape_string, removeslashes и т. Д.

У кого-нибудь есть идеи, как скрыть содержимое файла?

Большое спасибо,

Ответы [ 4 ]

2 голосов
/ 07 декабря 2009

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

1 голос
/ 08 декабря 2009

Ранее я использовал следующую последовательность, которая, кажется, работает хорошо и будет сохранять любые данные в БД, включая изображения, PDF-файлы, массивы данных и т. Д.:)

Хранение данных (может быть строкой, массивом, объектом и т. Д.);

Сначала включите данные в строку в кодировке base64

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

Затем сохраните эти строковые данные в БД ...


Получение данных;

Извлечение строковых данных из БД

декодировать данные обратно в то, что вы хотите (может потребоваться выполнить дополнительный шаг после этого в зависимости от входных данных, массива, изображения и т. Д.)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

Это, безусловно, помогло мне сохранить то, что мне нужно было хранить в базе данных MySQL!

0 голосов
/ 07 декабря 2009

Помимо проблемы с выходом из системы, вы можете столкнуться с ошибками «слишком большой пакет», если системная переменная (MySQL) max_allowed_packet установлена ​​в «маленькое» значение.
Используя расширение mysqli, подготовленные операторы и mysqli_stmt :: send_long_data , вы можете избежать обеих проблем.

0 голосов
/ 07 декабря 2009

Угадайте: вы можете столкнуться с ошибками из-за несовместимости между наборами символов. PDF, вероятно, является бинарным файлом, поэтому вам нужно убедиться, что для его обработки настроен столбец db.

...