2012-08-23 8 views
7

używam PHP 5.4.4 i mi się bardzo dziwne zachowanie z FuelPHP ORM zapisać i aktualizacji funkcji.FuelPHP aktualizacja ORM skutkuje " zamiast "sporadycznie

Próbuję zapisać albo dane serializowane lub JSON do pola w bazie danych, więc coś takiego jak {"name":"michael"}. Kiedy używam model->save() bezpośrednio po Model::forge() wydaje się, że działa dobrze w 100% czasu, a ciąg, który widzisz, jest przechowywany w bazie danych MySQL.

Jeśli jednak natychmiast zmienię coś w stylu model-> właściwość = "nowa właściwość" (nie JSON lub właściwość serializowanych danych), a następnie wykonaj inną model->save() 90% czasu zmieni mój " w "

Wygląda na to, że po debugowaniu problemu i krok po linii, nie powieli tego problemu! Przejdzie przez cały skrypt i nadal będzie mieć poprawne " zamiast "

Ten problem doprowadza mnie do szału. Zakładam, że jest to konfiguracja, albo będzie dużo więcej skarg, ale nie mogę znaleźć właściwego przełącznika. Ustawiłem zarówno php_flag magic_quotes_gpc Off i php_flag magic_quotes_runtime Off w moim. Htaccess (chociaż nie powinno być potrzebne w PHP 5.4+) i zweryfikowaliśmy, że oba są fałszywe.

Brak tu pomysłów. Coś do zbadania byłoby naprawdę pomocne.

+0

wydaje mieć do czynienia z filtrem wyjściowym. Zauważyłem, że sendin g Wiadomość e-mail z powiadomieniem, która wykorzystywała dane, wydaje się być przyczyną problemu, a następnie ponownie, jeśli spróbuję uzyskać dostęp do tego pola z funkcji modelu w widoku, robi to. – michael

+0

jeśli nie masz więcej pomysłów, zainstaluj xdebug, podążaj za kuźnią i ratuj ... magiczne cytaty nie mają nic wspólnego z kodowaniem cudzysłowów w html i tak na pewno nie istnieje w 5.4 (nawet jeśli to system polegał na je, a teraz go nie ma), jest pewne ustawienie w twoim ORM transformującym te wartości. – fd8s0

+1

Nie jest jasne z twojego pytania * w którym momencie * zdajesz sobie sprawę, że '' 'zamieniło się w' " '. Jeśli to zrobione przez Fuelphp powinieneś zeskanuj wszystkie pliki dla tego ciągu – hakre

Odpowiedz

0

Spróbuj dodać kilka "echo" w celu wydrukowania zmiennych, aby dowiedzieć się, co się dzieje. Zwykle idzie o to, aby dowiedzieć się dlaczego.

Możesz także spróbować dodać coś w rodzaju double_encode dla encji html, aby zapobiec ich kodowaniu.

0

jeśli "są konwertowane na " w bazie danych, to nie stanowi to problemu dla bezpieczeństwa.Jeśli wyrenderujesz dane wyjściowe w przeglądarce, pojawi się jako" ponownie.

A jeśli jego przeglądarka wyświetla "jako " to trzeba zdekodować wartość przed wydrukowaniem.

3

Twój ORM może za pomocą jakiegoś funkcji korekcyjnej, aby zapisać swój ciąg json. Jest to funkcja bezpieczeństwa, aby zapobiec sql ataki wtrysku. używać rozwiązań NoSQL jak MongoDB lub CouchDB jeśli trzeba przechowywać json. w przeciwnym razie musisz czyszczenia struny json po wyjdą z mysql i zanim je rozszyfrować.

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

+0

Nie sądzę, że "* używaj innej bazy danych *" jest poprawną odpowiedzią tutaj. Najprawdopodobniej używasz filtrowania widoku [fuelphp] (http://fuelphp.com/docs/ general/views.html #/security). Aby obejść ten problem, użyj '$ view-> set_safe ('var', $ value)'.** ProTip ** - możesz także automatycznie dekodować/kodować json za pomocą konfiguracji orm używając 'data_type = 'json'' i Observers: http://fuelphp.com/docs/packages/orm/observers/included.html#/os_typing – iturgeon

Powiązane problemy