आपके कोड और आपके "समाधान" के साथ दो सबसे बड़ी समस्याएं:
- आपके पास
@
है हर जगह ऑपरेटर। जिसके लिए आपके पास अपने प्रश्न के लिए -1 वोट है।@
ऑपरेटर है बुराई ही। आपके द्वारा देखे जाने वाले रिक्त पृष्ठ के लिए IT जिम्मेदार है। - हालांकि, आपके द्वारा चुने गए उपाय ने स्थिति को और खराब कर दिया है। यह "या मरो" बात किसी त्रुटि रिपोर्टिंग समस्या को हल करने के लिए कोई जादू मंत्र नहीं है। और अनुचित तरीके से उपयोग किए जाने से त्रुटियां होंगी जैसे आपके पास है। जिसके लिए आपके पास
1
. है त्रुटि संदेश में।
सबसे पहले, आपका समावेश ठीक है, इसलिए, इसे अकेला छोड़ दें।
mysqli से त्रुटि प्राप्त करने के लिए, इन निर्देशों का पालन करें:
बेतरतीब ढंग से "या मरो" जोड़ने के बजाय, आपको अधिक मजबूत और सहायक त्रुटि रिपोर्टिंग समाधान की आवश्यकता है।
यदि आप सभी एप्लिकेशन कोड में mysqli_query() का उपयोग कर रहे हैं, इसे किसी सहायक वर्ग में शामिल किए बिना, trigger_error()
PHP त्रुटि को बढ़ाने का एक अच्छा तरीका है, क्योंकि यह आपको फ़ाइल और लाइन नंबर भी बताएगा जहाँ त्रुटि हुई है
$res = mysqli_query($mysqli,$query) or trigger_error(mysqli_error($mysqli)."[$query]");
आपकी सभी लिपियों में
और तब से आपको इसका कारण बताया जाएगा कि वस्तु क्यों नहीं बनाई गई।(यदि आप इस or
के बारे में उत्सुक हैं सिंटैक्स, मैंने इसे यहां समझाया है
- यह यह भी बताता है कि आपके पास (1)
. क्यों है त्रुटि संदेश में)
हालांकि , यदि आप अपनी क्वेरी को किसी वर्ग में इनकैप्सुलेट कर रहे हैं, तो ट्रिगर त्रुटि से फ़ाइल और लाइन काफी बेकार होगी क्योंकि वे कॉल को ही इंगित करेंगे, न कि एप्लिकेशन कोड जो कुछ समस्या का कारण बना। इसलिए, जब mysqli कमांड को इनकैप्सुलेट किया जाता है, तो दूसरे तरीके का इस्तेमाल करना पड़ता है:
$result = $mysqli->query($sql);
if (!$result) {
throw new Exception($mysqli->error." [$query]");
}
चूंकि अपवाद आपको एक स्टैक ट्रेस . प्रदान करेगा , जो आपको उस स्थान तक ले जाएगा जहां से एक गलत प्रश्न पूछा गया था।
ध्यान दें कि आपको सामान्य रूप से PHP त्रुटियों को देखने में सक्षम होना चाहिए। एक लाइव साइट पर आपको त्रुटि लॉग देखना होता है, इसलिए, सेटिंग्स होनी चाहिए
error_reporting(E_ALL);
ini_set('display_errors',0);
ini_set('log_errors',1);
स्थानीय विकास सर्वर पर रहते हुए स्क्रीन पर त्रुटियां करना ठीक है:
error_reporting(E_ALL);
ini_set('display_errors',1);
और निश्चित रूप से आपको कभी भी अपने बयानों के सामने त्रुटि दमन ऑपरेटर (@) का उपयोग नहीं करना चाहिए।