Сериализованный разрыв массива при извлечении из базы данных
Я сохраняю данные в базе данных mysql. Эти данные представляют собой массив, а контент - это разные данные текущего пользователя, который входит в систему в моей системе.
Я делаю это при сохранении в базе данных:
$data = addslashes(serialize($array));
затем
"UPDATE or INSERT INTO TABLE SET ... data = '$data';"
Теперь данные сохраняются правильно, так как оператор insert или update возвращается из моего php-кода.
Моя проблема в том, что когда я пытаюсь выполнить его сериализацию, он возвращает false и уведомление отображается на моей странице.
Что я делаю неправильно?
Ответы
Ответ 1
Ставлю, что поле в вашей базе данных 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), возможно, вам стоит проверить, какие данные вы сохраняете и, возможно, фильтруете или удаляете ненужные.
Ответ 2
После получения данных из таблицы удалите косые черты перед функцией unserialize
.
Попробуйте вставить без addslashes()
и добавьте косые черты перед его переносом в массив.