2012-08-23 56 views
7

我使用PHP 5.4.4和我得到與FuelPHP ORM保存和更新功能很奇怪的行爲。FuelPHP更新導致",而不是「偶爾

我試圖挽救要麼序列化或JSON數據在數據庫中的字段,以便像{"name":"michael"}。當我使用model->save()Model::forge()後直接似乎工作的時候,你看到的字符串罰款100%是獲取存儲在MySQL數據庫的一個。

但是,如果我馬上更改類似模型 - >屬性=「新屬性」(不是JSON或序列化的數據屬性),然後做一套model->save()它將90%的時間把我所有的"變成"

看來,當我調試的問題,並通過線通過線步驟,它不會重現此問題!它將通過整個腳本並且仍然具有正確的"而不是"

這個問題讓我發瘋。我會認爲它是一個配置的東西,或者會有更多的投訴,但我找不到合適的開關。我已經在我的.htaccess中設置了 php_flag magic_quotes_gpc Offphp_flag magic_quotes_runtime Off(雖然它不應該在PHP 5.4以上版本中使用)並驗證它們都是錯誤的。

我在這裏沒有想法。任何要調查的東西都會很有幫助。

+0

似乎與輸出過濾有關,我注意到了sendin g使用數據的通知電子郵件似乎是導致問題的原因,然後再次嘗試從模型上的某個函數通過它所做的視圖訪問該字段。 – michael

+0

如果你沒有更多的想法,安裝xdebug,遵循僞造和保存...魔術引號與編碼引號到html無關,它不存在於5.4無論如何(即使是你的系統是依靠他們現在它走了),還有就是在你的ORM一些設置轉化這個值 – fd8s0

+1

這不是從你的問題*清晰此時*您意識到'「'已經變成'"'。如果由Fuelphp之後,你應該掃描該字符串的所有文件 – hakre

回答

0

嘗試加入一些「回聲」報表打印出你的變量,這樣就可以揣摩出它的發生。這通常會發現原因。

您也可以嘗試添加類似double_encode爲HTML實體從編碼它們停止。

0

如果「在數據庫中被轉換爲"那麼它不是問題,它的安全性如果你在瀏覽器上渲染輸出,它會再次出現」。

而且如果你的瀏覽器中顯示「爲",那麼你需要在打印前值進行解碼。

3

你的ORM可能使用某種逃生功能,以節省您的JSON字符串。這是一項安全功能,以防止SQL注入攻擊。如果你需要JSON存儲使用的NoSQL解決方案,如MongoDB的或CouchDB的。否則,你將需要清理你的JSON字符串後,他們出來的MySQL之前,你對它們進行解碼。

http://dev.mysql.com/doc/refman/5.0/en/string-literals.html

+0

我不認爲「*使用不同的數據庫*」是這裏的正確答案,很可能您正在運行[fuelphp的視圖過濾](http://fuelphp.com/docs/ general/views.html#/ security)。使用'$ view-> set_safe('var',$ value)'來繞過這個問題。** ProTip ** - 您還可以使用orm的配置使用'data_type ='json''和Observers自動解碼/編碼json:http://fuelphp.com/docs/packages/orm/observers/included.html#/os_typing – iturgeon

相關問題