डेटाबेस अपडेट के लिए PHP तैयार स्टेटमेंट
यह चर्चा SQL इंजेक्शन जैसी कमजोरियों को रोकने के लिए PHP में तैयार स्टेटमेंट के उचित उपयोग पर केंद्रित है। विचाराधीन कोड ब्लॉक का उद्देश्य एक तैयार कथन का उपयोग करके एकल फ़ील्ड के साथ डेटाबेस तालिका को अद्यतन करना है। डेटाडंप तालिका को अद्यतन करने के प्रयास में कथन। हालाँकि,bind_param() विधि के दौरान गलत पैरामीटर क्रम के कारण निष्पादन असफल है। वर्तमान कोड पैरामीटरों को $id और $content के क्रम में बांधता है, जबकि SQL कथन उन्हें विपरीत क्रम में अपेक्षित करता है, जिससे गलत रिकॉर्ड पहचान होती है और शून्य पंक्तियाँ प्रभावित होती हैं।
नीचे दिया गया सही कोड इसे ठीक करता है मापदंडों को सही क्रम में बाइंड करके और अतिरिक्त त्रुटि प्रबंधन प्रदान करके त्रुटि:
$stmt = $this->mysqli->prepare(''UPDATE datadump SET content=? WHERE id='); /* हमेशा जांचें कि तैयारी () सफल हुई या नहीं */ अगर ($stmt === गलत) { ट्रिगर_त्रुटि($यह->mysqli->त्रुटि, E_USER_ERROR); वापस करना; } $आईडी = 1; /* हमारे पैरामीटर्स को बांधें*/ /* वैरिएबल को SQL पैरामीटर के समान क्रम में बाइंड करें */ $stmt->bind_param('si', $content, $id); /* हमारे पैरामीटर सेट करें */ /*तैयार कथनों का उपयोग करते समय भागने की कोई आवश्यकता नहीं है*/ $सामग्री = $_POST['सामग्री'] ?: ''; /*तैयार कथन निष्पादित करें*/ $स्थिति = $stmt->निष्पादित(); /* हमेशा जांचें कि क्या निष्पादन () सफल हुआ है */ अगर ($स्थिति === गलत) { ट्रिगर_त्रुटि($stmt->त्रुटि, E_USER_ERROR); } printf("%d पंक्ति सम्मिलित की गई।\n", $stmt->प्रभावित_रो);$stmt = $this->mysqli->prepare("UPDATE datadump SET content=? WHERE id=?");
/* Always check whether the prepare() succeeded */
if ($stmt === false) {
trigger_error($this->mysqli->error, E_USER_ERROR);
return;
}
$id = 1;
/* Bind our params */
/* Bind variables in the same order as SQL params */
$stmt->bind_param('si', $content, $id);
/* Set our params */
/* No escaping needed when using prepared statements */
$content = $_POST['content'] ?: '';
/* Execute the prepared Statement */
$status = $stmt->execute();
/* Always check whether the execute() succeeded */
if ($status === false) {
trigger_error($stmt->error, E_USER_ERROR);
}
printf("%d Row inserted.\n", $stmt->affected_rows);
आपके सामने आया "0 पंक्तियाँ सम्मिलित" संदेश देय है उलटे पैरामीटर क्रम में। आईडी और सामग्री पैरामीटर गलत क्रम में बंधे हुए थे, जिसके कारण WHERE क्लॉज का कोई पंक्ति से मिलान नहीं हो रहा था।अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3