Сериализированные разрывы массивов при извлечении из базы данных - PullRequest
12 голосов
/ 23 декабря 2011

Я сохраняю данные в базе данных MySQL. Эти данные являются массивом, а содержимое - это разные данные текущего пользователя, который вошел в мою систему.

Я делаю это, когда сохраняю в базу данных:

$data = addslashes(serialize($array));

тогда

"UPDATE or INSERT INTO TABLE SET ... data = '$data';"

Теперь данные сохранены правильно, поскольку оператор вставки или обновления возвращает действительный код из моего php-кода.

Моя проблема в том, что когда я пытаюсь снять сериализацию, он возвращает false и на моей странице появляется уведомление.

Что я делаю не так?

Ответы [ 2 ]

23 голосов
/ 23 декабря 2011

Бьюсь об заклад, поле в вашей базе данных mysql недостаточно велико, чтобы сохранить все символы. Вот почему, когда вы отменяете сериализацию, вы получаете уведомление и ничего не получаете взамен.

Попробуйте увеличить поле до MEDIUMBLOB или MEDIUMTEXT (максимальная длина 16 777 215) или LONGBLOB или LONGTEXT (максимальная длина 4 294 967 295) следующим образом:

ALTER TABLE your_table MODIFY COLUMN column_name MEDIUMTEXT /* other properties*/;

И попробуйте сохранить и снова прочитать ваши данные.

Теперь, если ваши данные превышают 4 294 967 295 (то есть LONGBLOB или LONGTEXT), возможно, вам следует проверить, какие данные вы сохраняете, и, возможно, отфильтровать или удалить некоторые ненужные.

0 голосов
/ 23 декабря 2011

После получения данных из таблицы удаляете ли вы косые черты перед функцией unserialize.

Попробуйте вставить без addslashes() и добавьте косые черты до того, как они попадут в массив.

...