Вопрос

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

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

Я использовал addslashes, mysql_real_escape_string, Removeslashes и т.д.

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

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

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

Решение

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

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

Сначала преобразуйте данные в строку в кодировке Base64.

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

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


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

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

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

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

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

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

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

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

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

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