2012-08-23 17 views
7

मैं PHP 5.4.4 का उपयोग कर रहा है और मैं FuelPHP ORM बचाने के लिए और अद्यतन कार्यों के साथ बहुत अजीब व्यवहार हो रही है बजाय " का परिणाम है।ORM की FuelPHP अद्यतन "का कई मायनों

मैं या तो बचाने के लिए कोशिश कर रहा हूँ डेटाबेस में किसी क्षेत्र में क्रमबद्ध या जेएसओएन डेटा {"name":"michael"} जैसे कुछ। के बाद model->save() का उपयोग करने के बाद सीधे model->save() का उपयोग करता है, ऐसा लगता है कि यह 100% समय ठीक काम करता है और जो स्ट्रिंग आप देखते हैं वह वह है जो MySQL डीबी में संग्रहीत हो जाता है।

हालांकि, अगर मैं तुरंत मॉडल-> property = 'new property' (JSON या serialized डेटा प्रॉपर्टी नहीं) जैसे कुछ बदलता हूं और फिरकरता हूंयह 90% समय मेरे सभी " को &quot में बदल देगा;

ऐसा लगता है कि जब मैं इस मुद्दे को डीबग करता हूं और रेखा से लाइन के माध्यम से कदम उठाता हूं, तो यह इस समस्या को पुन: उत्पन्न नहीं करेगा! यह पूरी स्क्रिप्ट के माध्यम से बना देगा और अभी भी &quot के बजाय सही " है;

यह समस्या मुझे पागल कर रही है। मैं इसे एक कॉन्फ़िगरेशन चीज़ मानता हूं या बहुत अधिक शिकायतें होती हैं, लेकिन मुझे सही स्विच नहीं मिल रहा है। मैंने अपने .htaccess में php_flag magic_quotes_gpc Off और php_flag magic_quotes_runtime Off दोनों सेट किए हैं (हालांकि इसे PHP 5.4+ में आवश्यक नहीं होना चाहिए) और सत्यापित किया गया है कि दोनों झूठे हैं।

मैं यहां विचारों से बाहर हूं। जांच करने के लिए कुछ भी वास्तव में सहायक होगा।

+0

ऐसा लगता है आउटपुट फ़िल्टरिंग के साथ करना है। मैंने देखा कि sendin जी एक अधिसूचना ईमेल जो डेटा का उपयोग करता है, समस्या उत्पन्न कर रहा था, और फिर फिर यदि मैं किसी मॉडल पर किसी फ़ंक्शन से उस फ़ील्ड तक पहुंचने का प्रयास करता हूं तो यह करता है। – michael

+0

यदि आपके पास कोई और विचार नहीं है, तो xdebug इंस्टॉल करें, फोर्ज का पालन करें और सहेजें ... जादू उद्धरणों में एचटीएमएल में एन्कोडिंग उद्धरण के साथ कुछ लेना देना नहीं है और यह 5.4 में मौजूद नहीं है (भले ही यह था कि आपका सिस्टम भरोसा कर रहा था उन्हें और अब यह चला गया है), इस मूल्य को बदलने के आपके ओआरएम में कुछ सेटिंग है – fd8s0

+1

यह आपके प्रश्न से स्पष्ट नहीं है * किस बिंदु पर * आप महसूस करते हैं कि '' '" 'में बदल गया है। यदि यह फ्यूलफ द्वारा किया जाता है तो आपको उस स्ट्रिंग के लिए सभी फाइलों को स्कैन करें। – hakre

उत्तर

0

अपने चरों को मुद्रित करने के लिए कुछ "गूंज" कथन जोड़ने का प्रयास करें ताकि आप यह पता लगा सकें कि यह कहां हो रहा है। यह आमतौर पर क्यों पता लगाने की दिशा में एक लंबा रास्ता तय करता है।

आप HTML इकाइयों के लिए उन्हें एन्कोडिंग से रोकने के लिए डबल_नकोड जैसे कुछ जोड़ने का भी प्रयास कर सकते हैं।

0

यदि डेटाबेस में " में परिवर्तित किया गया है तो यह कोई समस्या नहीं है। इसकी सुरक्षा के लिए। यदि आप ब्राउज़र पर आउटपुट प्रस्तुत करते हैं तो यह "फिर से" होगा।

और इसकी आपके ब्राउज़र प्रदर्शित "के रूप में " तो आप मुद्रण से पहले मान को डीकोड करने की आवश्यकता है।

3

आपका ORM शायद बच समारोह के कुछ प्रकार का उपयोग कर अपने json स्ट्रिंग को बचाने के लिए। यह एसक्यूएल को रोकने के लिए एक सुरक्षा सुविधा है इंजेक्शन हमला करता है। यदि आप json स्टोर करने के लिए की जरूरत है MongoDB या CouchDB की तरह एक NoSQL समाधान का उपयोग करें। नहीं तो आप सफाई करने के लिए अपने json तार की आवश्यकता होगी के बाद वे mysql से बाहर आते हैं और इससे पहले कि आप उन्हें डिकोड।

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

+0

मुझे नहीं लगता कि "* एक अलग डेटाबेस * का उपयोग करें" सही जवाब है। अधिकतर संभावना है कि आप [ईंधनफ़्पी के व्यू फ़िल्टरिंग] में चल रहे हैं (http://fuelphp.com/docs/ सामान्य/views.html #/सुरक्षा)। इस समस्या को बाईपास करने के लिए '$ view-> set_safe ('var', $ value) 'का उपयोग करें।** ProTip ** - आप 'data_type = 'json'' और पर्यवेक्षकों का उपयोग करके ओआरएम की कॉन्फ़िगरेशन का उपयोग करके जेसन को स्वतः-डीकोड/एन्कोड भी कर सकते हैं: http://fuelphp.com/docs/packages/orm/observers/included.html#/os_typing – iturgeon

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^