Актуализацията на FuelPHP на ORM води до " спорадично

Използвам PHP 5.4.4 и получавам много странно поведение с функциите за запазване и актуализиране на FuelPHP ORM.

Опитвам се да запазя или сериализирани, или JSON данни в поле в базата данни, така че нещо като {"name":"michael"}. Когато използвам model->save() директно след Model::forge(), изглежда, че работи добре в 100% от времето и низът, който виждате, е този, който се съхранява в MySQL db.

Ако обаче незабавно променя нещо като model->property = 'new property' (не JSON или свойството на сериализирани данни) и след това направя друго model->save(), това в 90% от случаите ще превърне всичките ми " в "

Изглежда, че когато отстранявам грешки и преминавам през ред по ред, той няма да възпроизведе този проблем! Ще премине през целия скрипт и ще има правилния " вместо "

Този проблем ме побърква. Предполагам, че е нещо от конфигурацията или ще има много повече оплаквания, но не мога да намеря правилния превключвател. Зададох както php_flag magic_quotes_gpc Off, така и php_flag magic_quotes_runtime Off в моя .htaccess (въпреки че не би трябвало да е необходимо в PHP 5.4+) и проверих, че и двете са неверни.

Идеите ми свършиха. Всичко за разследване би било наистина полезно.


person michael    schedule 23.08.2012    source източник
comment
Изглежда, че има общо с филтрирането на изхода. Забелязах, че изпращането на имейл за известие, който използва данните, изглежда причинява проблема и след това отново, ако се опитам да осъществя достъп до това поле от функция на модел чрез изглед, го прави.   -  person michael    schedule 23.08.2012
comment
ако нямате повече идеи, инсталирайте xdebug, следвайте ковачницата и запазете... магическите кавички нямат нищо общо с кодирането на кавички в html и така или иначе не съществуват в 5.4 (дори ако системата ви разчиташе на тях и сега го няма), има някаква настройка във вашия ORM, която трансформира тези стойности   -  person fd8s0    schedule 22.09.2012
comment
От въпроса ви не става ясно в кой момент разбирате, че " се е превърнало в ". Ако това се прави от Fuelphp, трябва да сканирате всички файлове за този низ.   -  person hakre    schedule 01.10.2012


Отговори (3)


Вашият ORM може би използва някаква escape функция, за да запази вашия json низ. Това е защитна функция за предотвратяване на атаки чрез sql инжектиране. Използвайте noSql решения като MongoDB или CouchDB, ако трябва да съхранявате json. В противен случай ще трябва да почистите вашите json низове, след като излязат от mysql и преди да ги декодирате.

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

person atorres757    schedule 06.11.2012
comment
Не мисля, че използване на различна база данни е правилният отговор тук. Най-вероятно се натъквате на филтриране на изгледи на fuelphp. Използвайте $view->set_safe('var', $value), за да заобиколите този проблем. ProTip - можете също така да декодирате/кодирате автоматично json, като използвате конфигурацията на orm, като използвате data_type = 'json' и наблюдатели: fuelphp.com/docs/packages/orm/observers/included.html#/ - person iturgeon; 03.11.2013

Опитайте да добавите някои "ехо" изрази, за да отпечатате вашите променливи, така че да можете да разберете къде се случва. Това обикновено води до откриване на причината.

Можете също така да опитате да добавите нещо като double_encode за html обектите, за да го спрете да ги кодира.

person RecentCoin    schedule 02.10.2012

ако " се преобразуват в в база данни, тогава това не е проблем. Това е за сигурност. Ако изобразите изхода в браузъра, той ще излезе отново като ".

И ако вашият браузър показва " as тогава трябва да декодирате стойността преди да отпечатате .

person user1635914    schedule 06.11.2012