Zend Framework - не вводить значения в базу данных - мусор идет в - PullRequest
2 голосов
/ 20 февраля 2010

Привет, ребята, я в чрезвычайной ситуации здесь. Мой код работал FINE некоторое время, когда ВСЕ вдруг что-то пошло не так, и я понятия не имею, что! Я сохраняю объект в своей базе данных, сериализуя его, а затем запускаю на нем base64_encode. Результатом является закодированная сериализованная строка, которую, когда я хочу получить, я просто декодирую и десериализую.

Работает нормально, но вдруг я понятия не имею, почему - всякий раз, когда я пытаюсь запустить часть, выполняющую вставку, - он кодирует объект корректно, но после выполнения запроса sql - значение, которое попадает в базу данных. это усеченный беспорядок !!!!

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

Понятия не имею, что происходит - код ниже показывает, как я делаю обновление:

$personsTable = new ZFltData_Db_Table(array('name'=>'people'));
$where = $personsTable->getAdapter()->quoteInto('id = ?', $id);
$data['object'] = base64_encode(serialize($obj));
$personsTable->update($data, $where);

Поле базы данных на самом деле является длинным текстом.

РЕДАКТИРОВАТЬ ==== Извини насчет этого. Ну, зашифрованная строка выглядит так:

YToyOntpOjA7YTozOntzOjg6ImNhdGVnb3J5IjtzOjU6InBob25lIjtzOjQ6InR5cGUiO3M6NDoiV29yayI7czo3OiJkZXRhaWxzIjtzOjEzOiIxMjMzIDQzNTQzNTQ1Ijt9aToxO2E6Mzp7czo4OiJjYXRlZ29yeSI7czo1OiJwaG9uZSI7czo0OiJ0eXBlIjtzOjQ6IkhvbWUiO3M6NzoiZGV0YWlscyI7czoxNzoiMTAwOTEyIDgwOTgxMjkwMTIiO319

Это выглядит так, если я вручную копирую и вставляю его в базу данных с помощью Navicat Explorer.

Однако код при выполнении в конечном итоге помещает в базу данных только следующее:

Tjs=

Странная часть в том, что это все, что вводится независимо от того, какое содержимое объекта закодировано ... объект на самом деле является ассоциативным массивом ... что здесь не так? Это работало нормально до ... только сегодня ...

1 Ответ

3 голосов
/ 20 февраля 2010

Tjs= base64_decodes to N;, который является сериализованным представлением null.

Таким образом, $obj - это null в вашем скрипте в тот момент, когда вы его сериализуете, а не ассоциативный массив.

Невозможно сказать, почему это так, потому что мы не знаем, откуда берется $ obj. Если над чем-то вы работаете в своем скрипте, выполните print_r() тесты, чтобы увидеть, не перезаписано ли оно где-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...