Как я потеряла целые сутки и волшебный var_dump

Изучаю популярный фреймворк Code Igniter. Небольшая задачка — сделать на сайте клана опросник. Все предельно примитивно. Но несколько ответов предполагают ввод неопределенного количества вариантов ответов. Решила себе облегчить жизнь и не создавать массу связанных таблиц в базе. И…
Застряла на моменте сериализации данных для сохранения их в базе.
Вроде все понятно и красиво: имеем массив, применяем функцию serialize(), получаем тот же массив, но в виде строки. Поскольку размерность строки – очень разная, в базе выбрала тип BLOB.
Предусмотрена обратная функция, чтобы из этой строки получить исходный массив. (Для объектов вроде тоже работает, но пока еще не разбиралась).
Переменная приходит из формы, в которой в выпадающем списке разрешен множественный выбор.
В контроллере записываю пришедшую переменную build в переменную $post (массив), которая впоследствии выступает аргументом для функции записи в базу (использую activ records).
Ну, надо же проверить.
Смотрю в базу: записи записываются, значения остальных полей совпадают с введенными в форму.
Проверяем выборку из базы и обратную функцию unserialize.
(О том, как я сделать select не могла из-за использования не тех кавычек, я умолчу. Стыдно ))
Выбираю. Получаю result. Делаю var_dump. Долго чешу репку – что ж такое object StdClass. Решаю что суть в поле BLOB. Меняю тип поля на varchar.
Запускаю, проверяю. Ошибка! Функция unserialize радостно сообщает: вы мне даете массив, а мне нужна строка. Мысленно чертыхаюсь: где ж ты взяла массив, там ведь строка – я своими глазами в phpMyAdmin видела! Надо сказать, что чуть раньше я сообразила, что нужно использовать result_array(), а не result().
Начинаю членить и дробить свои «процедурки»: на каждом этапе вставляю var_dump, дополняю это текстовым комментарием. Наконец до меня доходит, что все дело в том, что я пытаюсь unserialize применить целиком к массиву result_array(). Но просмотр того, что выдает var_dump, меня где-то на грани сознания удивляет: я выбираю два пункта из списка, а показывает всего один.
Решаю проверить, как работает сериализация-унсериализация просто напрямую – описываю массив, serialize-unserialize… и – ап! Работает. А вот в моем приложении – не работает. Хоть тресни – показывает мне только один элемент в массиве.
В процессе поиска ответа на вопрос, где ж рылась собака, наткнулась на то, что «перед записью в базу сериализованных массивов, обязательно экранируйте спецсимволы». Благополучно применила addslashes. В результате – еще одна ошибка: унсериализация говорит о неудаче и говорит о не совпадении побайтно… Заодно поигралась с заменой символов. То, что в MySQL строка после сериализации попадает «как надо» – поняла после двух десятков запусков с применением var_dump.
И только после всех этих экспериментов, я наконец задала себе вопрос, который нужно было задать с самого начала: куда теряется второй элемент массива при множественном выборе?
Ларчик открывался просто: при написании формы, я обозвала name=»build» вместо name=»build[]«.
Жаль, конечно, потерянного времени, но урок, полагаю, я усвою надолго. Ну и куча информации, которую я пропустила через себя, думаю, прорастет чем-нибудь интересным.