php - Query executing in a loop causes script to exit after first iteration -
यहां उलझन में है .... यह कोड:
$ qry = sprintf ("INSERT में समाचार_साइट्स_मुखपृष्ठ_ग्रेड मूल्य ('',% d, '% s', अब (), अब ()) ", $ site_id, mysql_real_escape_string ($ html));
... एक पाश में निष्पादित किया जाता है जहां $ html
हर बार बदलता है यह कोड एक बार क्रियान्वित करता है लेकिन अगली बार, स्क्रिप्ट केवल मर जाती है कोई चेतावनियां / त्रुटियां, कुछ भी नहीं $ html
एक स्ट्रिंग है जो वेबपृष्ठ का प्रतिनिधित्व करता है, इसलिए यह बहुत लंबा हो सकता है मैंने 32M में PHP में मेमरी सीमा को बढ़ा दिया है और MySQL में max_allowed_packet को 16M पर सेट किया है लेकिन कुछ नहीं।
किसी के पास कोई विचार है? धन्यवाद!
अद्यतनः ये फ़ंक्शन है जिसे किसी पाश के भीतर कहा जाता है।
फ़ंक्शन save_html ($ site_id, $ html) {वैश्विक $ db; कोशिश करें {$ qry = sprintf ("साइट_ग्राद मूल्यों में शामिल करें ('',% d, '% s', अब (), अब ())", $ site_id, mysql_real_escape_string ($ html)); $ Db- & gt; डालने ($ qry); } पकड़ (अपवाद $ ई) {गूंज 'अपवाद:', $ e- & gt; getMessage (), "\ n"; } वापसी; }
मेरी सिफारिश इस समस्या के निवारण को छोड़ देना होगा और स्विच करना होगा यह समर्थन करता है, जो एसक्यूएल इंजेक्शन के लिए कमजोर नहीं हैं जब आप मापदंडों का उपयोग करते हैं और दोहराए जाने वाले प्रश्नों के लिए बहुत अधिक प्रदर्शन करते हैं।
यह आपके फ़ंक्शन का सरल रिफ़ाक्टर है, जो मानता है $ db
एक PDO उदाहरण रखता है:
फ़ंक्शन save_html ($ site_id, $ html) {वैश्विक $ db; स्थिर $ insert = नल; यदि (isnull ($ insert)) {/ * स्पष्ट रूप से कॉलमों का नाम दें, यदि आप बाद में तालिका में अधिक जोड़ते हैं या उनके आदेश बदलते हैं मैं यह भी अनुमान लगा रहा हूं कि `आईडी` स्वतः-वृद्धिशील है, इसलिए मैं इसे बाहर निकाल रहा हूं। * / $ Insert = $ db- & gt; तैयार ("site_grab (sid, site_text, date_added, date_modified) INSERT VALUES (?,?, NOW (), NOW ())"); } {$ Insert- & gt; निष्पादित करें (अर ($ site_id, $ html)) प्रयास करें; } पकड़ (अपवाद $ ई) {गूंज 'अपवाद:', $ e- & gt; getMessage (), "\ n"; } वापसी; }
यदि date_added
प्रकार TIMESTAMP है, तो आप इसका डिफ़ॉल्ट मान को CURRENT_TIMESTAMP
पर सेट कर सकते हैं और उसे डालने से बाहर छोड़ सकते हैं। वैकल्पिक रूप से, पर अद्यतन CURRENT_TIMESTAMP
संपत्ति को तारीख_संचालित
कॉलम में जोड़ें, जिसका अर्थ है कि जब आप एक पंक्ति अपडेट करते हैं तो आपको स्पष्ट रूप से फ़ील्ड सेट करने की आवश्यकता नहीं है यदि डालने के लिए अद्यतन करने से अधिक सामान्य होने जा रहा है, तो पूर्व करें; अन्यथा, उत्तरार्द्ध करें।
आप एक वस्तु में तैयार बयान भी संग्रहित कर सकते हैं, ताकि वे कई कार्यों से सुलभ हो सकें और वैश्विक $ db
को किसी प्रकार की सेवा लोकेटर के साथ बदल दें ( सबसे आसान तरीका है एक स्थिर कार्य या कुछ वर्ग की संपत्ति का उपयोग) या निर्भरता इंजेक्शन (पढ़ें "") का उपयोग करें।
Comments
Post a Comment