Подтвердить что ты не робот

База данных mySQL изменяется, когда я открываю поле в phpmyadmin, но я не делаю никаких изменений

У меня есть сайт wordpress и шаблон с установленными демо-данными. Когда я открываю некоторые поля в phpmyadmin, даже если я не делаю никаких изменений и выбираю другое поле, он обновляет поле. Нет проблем, ничего не обновляет, потому что я сделал нулевые изменения. Что происходит, тогда передний конец сайта wordpress выходит из строя, потому что SOMETHING изменился в поле, которое я просто изучал. В рассматриваемом поле есть большой фрагмент HTML-кода, и немало; и "символы в нем...

Я думаю, когда я открываю поле и закрываю его, команда update анализирует, что в поле, и он видит; и "повсюду... Я мог ошибаться. В любом случае, когда я просматриваю данные и копирую их либо с помощью запроса оболочки mysql, либо с помощью phpmyadmin, и обновляю его ТОЧНО обратно в БД, как это было раньше, SOMETHING меняется, но даже используя блокнот ++ сравнить плагин и каждый раз смотреть на данные, нет никаких изменений...

Это имеет смысл? Это сводит меня с ума!

Это сайт wordpress, использующий тему ракеты, с каркасной платформой, если кто-то знаком...

Вот видео-демонстрация этой проблемы

https://www.youtube.com/watch?v=ljXTDKKmUUw

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

По-видимому, это распространенная проблема с wordpress и приводит к разочарованию, когда люди пытаются выполнять миграции баз данных, которые изменяют длину URL.

Я узнал больше об этой проблеме: http://wpgarage.com/tips/data-portability-and-data-serialization-in-wordpress/

4b9b3361

Ответ 1

Дело в том, что в данных базы данных, о которых идет речь, не просто содержится "текст с кучей двоеточий", это PHP сериализованные данные. Правда, это текст, но его нужно рассматривать как двоичный. Когда вы произвольно изменяете сериализованные данные, например. меняя слово на более длинное или более короткое слово, вы нарушаете структуру данных. Когда связанный код пытается впоследствии десериализовать данные, он терпит неудачу. Мораль: не редактируйте сериализованные данные небрежно, иначе вы сломаете материал.

Цитирование из документации PHP : Сериализованные строки не должны быть даже сохранены в полях TEXT.

Обратите внимание, что это двоичная строка, которая может содержать нулевые байты, и необходимо хранить и обрабатывать как таковые. Например, serialize() вывод обычно должен храниться в поле BLOB в базе данных, а не поле CHAR или TEXT.

В любом случае, есть способы редактировать сериализованные данные PHP, если вы придерживаетесь правил сериализованных значений или корректируете соответствующую структурную информацию. Есть даже некоторые специализированные редакторы или онлайн инструменты для этого ( Я их не тестировал). Чтобы узнать больше о структуре сериализованных данных, проверьте верхний комментарий egingell в связанной документации на php.net, в которой описывается анатомия serialize() 'ed значение:

String → s: размер: значение;

Целое число → i: значение;

Boolean → b: значение; (не сохраняет "true" или "false", сохраняет "1", или '0')

Null → N;

Массив → a: размер: {определение ключа; определение значения; элемент)}

Объект → O: strlen (имя объекта): имя объекта: объект size: {s: strlen (имя свойства): имя свойства: свойство определение (повторяется за свойство)}

Значения строк всегда заключаются в двойные кавычки
Клавиши массива всегда целые числа или строки
"null = > 'value'" равно "s: 0:" "; s: 5:" value ";",
"true = > 'value'" равно "i: 1; s: 5:" value ";",
"false = > 'value'" равно "i: 0; s: 5:" value "; ',
" array (независимо от содержимого) = > "значение" означает "предупреждение о недопустимом смещении", потому что вы не можете использовать массив в качестве ключа.
однако, если вы используете переменную, содержащую массив в качестве ключа, она будет equate to s: 5: "Array"; s: 5: "value"; "и попытка использовать объект поскольку ключ приведет к тому же поведению, что и использование массива.

Ответ 2

По внешнему виду видео кажется, что вы используете довольно старую версию PMA. Я бы начал обновлять PMA, PHP и MySQL, чтобы узнать, есть ли проблема с этой конкретной версией.