- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков

В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Никогда раньше не пробовал хранить массивы в БД, и тут столкнулся с проблемой.
Имею массив $arr.
$arr_ser = serialize($arr) поместил в ячейку arr таблицы базы. Вижу его там в PHPmyAdmin
Потом извлёк, вижу его на странице echo $arr_ser=data[arr] в том же упорядоченном виде.
Но $arr=unserialize( $arr_ser ) выдаёт пустоту. т.е print_r($arr) не выводится совсем. Массива нету. Пропал... Почему??
Экранировка mysql_real_escape_string($arr) перед записью в базу не помогла.
Ладно. Не понимаю куда он делся.. Закодировал перед отправкой в базу base64_encode($arr_ser)
Ура. Массив сохраняется. Но! раскодируется base64_decode($arr_ser) и далее unserialize( $arr_ser ) в крокозябрах.
На сайте и в базе кодировка 1251. Проблем с кодировкой в этих таблицах не было. Попробовал в базе ячейку arr поменять UTF8 - не помогло, выводит другие кракозябры.
Есть ли какие критерии для base64_decode по кодировке?
Что можно сделать в моём случае?
Поле какой тип имеет, BLOB? Его размер - достаточен, не обрезается при записи?
Если поле не BLOB, то просто менять в базе ячейку arr на UTF8 недостаточно, надо после подключения к БД делать:
или, если по полю есть поиск:
Или даже настраивать соединение с БД более тонко:
"SET character_set_connection ='cp1251'"); // В какую кодировку преобразовать полученные от клиента данные перед выполнением запроса
"SET collation_connection ='cp1251_general_ci'"); // Каким образом сравнивать между собой строки в запросах
Или просто сделайте поле типа BLOB - они хранятся и возвращаются "as is", то есть, в 'двоичном виде' и смена кодировок запросами выше на них не действуют.
Влезает serialize($arr) целиком , двумерный массив в конце две фигурных скобки на месте.
Все эти данные, которые в массиве отдельным текстом нормально входят в такое же текстовое поле. Я эти массивы хранил раньше просто - разбирал циклом в строку и сохранял в ячейках тех же таблиц. Проблем не было.
Но хранить массивом мне было бы удобнее для последующей его обработки другим скриптом.
Попробую скрипты в блокнотах utf8 обрабатывать.
---------- Добавлено 08.10.2015 в 13:16 ----------
В принципе для хранения данных разницы не вижу разницы в какой кодировке ячейка.
При выводе на странице прописал mysql_query("SET NAMES cp1251"); и всё выводится нормально в кирилице. Проблем не было.
Сейчас в ячейку utf8 запихал русский текст, нормально из неё выводится на страницу 1251 при наличии mysql_query("SET NAMES cp1251");.
Только при кодировке base64_ теперь вылез косяк.
---------- Добавлено 08.10.2015 в 13:23 ----------
оле какой тип имеет, BLOB?
Нет. Текстовое. TEXT
---------- Добавлено 08.10.2015 в 14:32 ----------
Пока удалось выводить base64_ кирилицей только на страницы Utf8 .
При чём, без разницы в какой кодировке была установлена текстовая ячейка.
Но массив и заливался в таблицу и парсился со страницы Utf8.
Но это уже хорошо.
Мне массивы нужны лишь для обработки. На сайте используется готовые переменные.
И не все массивы потом остаются целыми. Некоторые не удаётся получить.
Т.е, процедура хранения массивов в базе ненадёжна сама по себе?
В общем проблема решилась преобразованием массива в строку json_encode($arr, JSON_UNESCAPED_UNICODE).
Всё работает, все массивы целы, проблем с кирилицей тоже нет.
С сериалайзом так ничего и не добился. Сплошные косяки.
С сериалайзом так ничего и не добился. Сплошные косяки.
У вас проблемы с кодировкой, что явно об этом свидетельствует пустой результат при десериализации строки.