2010-02-20 90 views
2

嗨,大家好,我在這裏遇到緊急情況。我的代碼在FINE中工作了一段時間,突然有些事情出錯了,我不知道該怎麼辦!我通過序列化將數據庫中的對象存儲在數據庫中,然後在其上運行base64_encode。結果是一個編碼的序列化字符串,當我想檢索時,我只是解碼並解密它。Zend框架 - 不在數據庫中輸入值 - 垃圾進入

它一直工作正常,但突然間我不知道爲什麼 - 每當我嘗試運行插入的部分 - 它編碼的對象正確,但運行後的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 

它loks這樣,如果我手動複製粘貼到使用Navicat的資源管理器數據庫。

但是代碼時執行最終把剛剛在數據庫中的以下內容:

Tjs= 

怪異的部分是,這是所有進入無論對象的內容編碼是什麼...對象實際上是一個關聯數組......這裏有什麼錯?它工作正常,直到...直到今天......

+2

使用大寫和感嘆號不會讓你的答案更快 - 可能是相反的。 – 2010-02-20 11:41:13

+0

你可以顯示序列化的字符串是什麼樣的,以及截斷混亂的(小)例子嗎? – 2010-02-20 11:42:02

+0

@尼爾巴特沃斯 - 同意,編輯。對於OP - 我意識到你有緊迫感,但是你的問題將在幾天內得到解決,你的問題將會持續。我相應地編輯了你的問題。 – 2010-02-20 11:42:42

回答

3

Tjs= base64_decodes到N;,這是null的序列化表示。

因此,$objnull在您的腳本中的序列化它的點,而不是一個關聯數組。

不可能說出原因,因爲我們不知道$ obj來自何處。如果這是您在腳本中進一步處理的內容,請進行print_r()測試以查看它是否被覆蓋。

+0

+1尼斯扣除! – 2010-02-20 11:59:18

+0

好點讓我檢查,我會在一分鐘之內讓你知道! – Ali 2010-02-20 12:05:24

+0

通過Jove你是對的!感謝一羣人 - 我正在調用更新查詢兩次 - 第一次將它傳遞給對象,而第二次則是空值 - 非常感謝你爲我節省了整整一個下午的時間:D – Ali 2010-02-20 12:15:15