यह देखते हुए कि पीडीओ के लिए सबसे अनुशंसित त्रुटि मोड है ERRMODE_EXCEPTION
, कोई प्रत्यक्ष execute()
परिणाम सत्यापन कभी भी काम नहीं करेगा । जैसा कि कोड निष्पादन अन्य उत्तरों में दी गई शर्त तक नहीं पहुंचेगा।
तो, पीडीओ में क्वेरी निष्पादन परिणाम को संभालने के लिए तीन संभावित परिदृश्य हैं:
- सफलता बताने के लिए किसी सत्यापन की जरूरत नहीं है। बस अपने कार्यक्रम के प्रवाह के साथ रखें।
- अप्रत्याशित त्रुटि को संभालने के लिए, उसी के साथ रखें - तत्काल हैंडलिंग कोड की आवश्यकता नहीं है। डेटाबेस त्रुटि के मामले में एक अपवाद को फेंक दिया जाएगा, और यह साइट-वाइड त्रुटि हैंडलर को बुलबुला देगा जो अंततः एक सामान्य 500 त्रुटि पृष्ठ पर परिणाम देगा।
- डुप्लिकेट प्राथमिक कुंजी की तरह अपेक्षित त्रुटि को संभालने के लिए, और यदि आपके पास इस विशेष त्रुटि को संभालने के लिए एक निश्चित परिदृश्य है, तो एक
try..catch
ऑपरेटर का उपयोग करें ।
एक नियमित PHP उपयोगकर्ता के लिए यह थोड़ा अलग लगता है - यह कैसे, ऑपरेशन के प्रत्यक्ष परिणाम को सत्यापित करने के लिए नहीं? - लेकिन यह वास्तव में अपवाद कैसे काम करता है - आप कहीं और त्रुटि की जांच करते हैं। सभी के लिए एक बार। बेहद सुविधाजनक है।
तो, संक्षेप में: एक नियमित कोड में आपको किसी भी त्रुटि से निपटने की आवश्यकता नहीं है। बस अपना कोड इस प्रकार रखें:
$stmt->bindParam(':field1', $field1, PDO::PARAM_STR);
$stmt->bindParam(':field2', $field2, PDO::PARAM_STR);
$stmt->execute();
echo "Success!"; // whatever
सफलता पर यह आपको बताएगा, त्रुटि पर यह आपको नियमित त्रुटि पृष्ठ दिखाएगा कि आपका आवेदन ऐसे अवसर के लिए दिखा रहा है।
केवल मामले में जब आपके पास त्रुटि रिपोर्ट करने के अलावा एक हैंडलिंग परिदृश्य होता है, तो अपने सम्मिलित विवरण को try..catch
ऑपरेटर में डालें , जांचें कि क्या यह वह त्रुटि थी जो आप अपेक्षित थे और इसे संभाल लें; या - यदि त्रुटि कोई भिन्न थी - अपवाद को फिर से फेंकें , जिससे साइट-वाइड त्रुटि सामान्य तरीके से नियंत्रित किया जा सके। नीचे पीडीओ के साथ त्रुटि से निपटने के मेरे लेख का उदाहरण कोड है :
try {
$pdo->prepare("INSERT INTO users VALUES (NULL,?,?,?,?)")->execute($data);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
// Take some action if there is a key constraint violation, i.e. duplicate name
} else {
throw $e;
}
}
echo "Success!";
ऊपर दिए गए कोड में हम कुछ कार्रवाई करने के लिए विशेष त्रुटि की जांच कर रहे हैं और किसी अन्य त्रुटि (उदाहरण के लिए ऐसी कोई तालिका नहीं) के अपवाद को फिर से फेंक रहे हैं जो एक प्रोग्रामर को सूचित किया जाएगा।
जबकि फिर से - बस एक उपयोगकर्ता को कुछ बताने के लिए जैसे "आपका इंसर्ट सफल रहा" कभी भी किसी शर्त की आवश्यकता नहीं होती है।