Я пытаюсь загрузить файл .pdf в базу данных mysql, используя php.
Это все хорошо, за исключением содержимого файла. Независимо от того, как я пытаюсь убежать от специальных символов, запрос всегда терпит неудачу, главным образом с помощью «Неизвестной команды \ n».
Я использовал addlashes, mysql_real_escape_string, удаляет и т.д.
Кто-нибудь есть идеи о том, как избежать содержимого файла?
Большое спасибо,
Раньше я использовал следующую последовательность, которая, кажется, работает хорошо и будет хранить любые данные в db, включая изображения, pdf-файлы, массивы данных и т. Д. … 🙂
Хранение данных (может быть строкой, массивом, объектом и т. Д.);
Во-первых, превратите данные в строку с кодировкой base64
$strData = strtr( base64_encode( addslashes( gzcompress( serialize($dataToStore) , 9) ) ) , '+/=', '-_,');
Затем сохраните эти строковые данные в db …
Получение данных;
Извлечь строковые данные из db
(вам может потребоваться выполнить дополнительный шаг после этого в зависимости от входных данных, массива, изображения и т. д.),
$returnData = unserialize( gzuncompress( stripslashes( base64_decode( strtr($strDataFromDb, '-_,', '+/=') ) ) ) );
Это, безусловно, помогло мне сохранить то, что мне нужно было хранить в mySQL db!
Я не понимаю, почему вы хотите сохранить файл в базе данных, но я предлагаю вам взглянуть на подготовленные заявления .
Угадайте: вы можете столкнуться с ошибками из-за несовместимости между наборами символов. PDF, вероятно, является двоичным файлом, поэтому вам нужно убедиться, что столбец db настроен таким образом.
Помимо проблемы экранирования вы можете столкнуться с «слишком большими» ошибками пакета, если системная переменная (MySQL) max_allowed_packet установлена на «маленькое» значение.
Используя расширение mysqli, подготовленные операторы и mysqli_stmt :: send_long_data, вы можете избежать обеих проблем.