Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ का उपयोग करके त्रुटि प्रबंधन के लिए सर्वोत्तम अभ्यास

यह एक बहुत अच्छा सवाल है, लेकिन शुरुआत में एक गलत आधार है:आप साइट-व्यापी त्रुटि रिपोर्टिंग से अलग पीडीओ के लिए त्रुटि रिपोर्टिंग ले रहे हैं। जो बहुत कम समझ में आता है:पीडीओ त्रुटियां हर तरह से अन्य त्रुटियों के समान होती हैं - फाइल सिस्टम त्रुटियां, HTTP त्रुटियां, और इसी तरह। इस प्रकार, केवल पीडीओ त्रुटि रिपोर्टिंग स्थापित करने का कोई कारण नहीं है। आपको केवल साइट-व्यापी त्रुटि रिपोर्टिंग को ठीक से सेट करने की आवश्यकता है।

Php.ini अप्राप्यता के संबंध में एक गलत धारणा भी है:आप ini_set() फ़ंक्शन का उपयोग करके हमेशा कोई कॉन्फ़िगरेशन निर्देश सेट कर सकते हैं। इस प्रकार, यहाँ error_reporting को 0 के विनाशकारी स्तर पर सेट करने का एक भी कारण नहीं है।

अपने बाकी सवालों के जवाब देने के लिए आपको बस थोड़ा सा सामान्य ज्ञान चाहिए।

आप खुद क्या सोचते हैं? क्या यह उपयोगकर्ता को कोई अच्छा सिस्टम त्रुटि संदेश दिखा रहा है? क्या यह किसी दुर्भावनापूर्ण उपयोगकर्ता को आंतरिक रूप से दिखाने वाला कोई अच्छा सिस्टम है?

क्या आपको इसके लिए कोई आपत्ति है?

क्या आपको नहीं लगता कि यह काफी विरोधाभासी विचार है - डेटाबेस में डेटाबेस त्रुटियों को लॉग करना?

आप इसे पहले ही दिखा चुके हैं:देव में प्रदर्शित करें और उत्पादों में लॉग इन करें। कुछ सरल कॉन्फ़िगरेशन विकल्पों के माध्यम से सभी को साइट-व्यापी नियंत्रित किया जाता है।

त्रुटि रिपोर्टिंग के लिए ट्राइ-कैच ब्लॉक का उपयोग बिल्कुल भी नहीं करना चाहिए। आप अपने ऐप में प्रत्येक क्वेरी के लिए एक अनुकूल त्रुटि संदेश के साथ कैच ब्लॉक नहीं लिखने जा रहे हैं , जैसा कि दूसरे उत्तर में सुझाया गया है, क्या आप हैं?

इस प्रकार आपका कोड होना चाहिए

<?php
  // Error handling
  error_reporting(-1);
  ini_set('display_errors',0);
  ini_set('log_errors',1);

  // Get credentials from outside document root
  require_once('../settings.php');

  // Tests connection to database
    $dbh = new PDO(
            sprintf(
              'mysql:host=%s;dbname=%s;port=%s;charset=%s',
              $settings['host'],
              $settings['name'],
              $settings['port'],
              $settings['charset']
            ),
            $settings['username'],
            $settings['password']
    );
    // Prevents emulated prepares and activates error handling
    // PDO::ERRMODE_EXCEPTION
    $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

अब सवाल पर आपने टिप्पणी में आवाज उठाई।

एक कस्टम त्रुटि स्क्रीन एक बहुत अलग मामला है और आपका कोड इसके साथ विशेष रूप से खराब है। न तो यह 404 त्रुटि होनी चाहिए और न ही HTTP रीडायरेक्ट का उपयोग करना चाहिए (यह SEO के लिए बहुत खराब है)।

एक कस्टम त्रुटि पृष्ठ बनाने के लिए आपको या तो अपनी वेब-सर्वर सुविधाओं (पसंदीदा) या PHP स्क्रिप्ट में एक त्रुटि हैंडलर का उपयोग करना होगा।

जब एक घातक त्रुटि का सामना करना पड़ता है (और न आया हुआ अपवाद एक है), PHP 200 OK HTTP स्थिति के साथ नहीं बल्कि 5xx स्थिति के साथ प्रतिक्रिया करता है। और प्रत्येक वेब-सर्वर इस स्थिति को पकड़ सकता है और एक त्रुटि पृष्ठ दिखा सकता है। उदा. अपाचे के लिए यह होगा

ErrorDocument 503 server_error.html

जहां आप जो भी बहाना चाहें लिख सकते हैं।

या आप PHP में एक कस्टम त्रुटि हैंडलर सेट कर सकते हैं जो सभी PHP त्रुटियों को भी संभाल लेगा, एक उदाहरण इस मामले पर मेरे द्वारा लिखे गए लेख में देखा जा सकता है:(im) try..catch का उचित उपयोग।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP और MySQL डेटाबेस का उपयोग करके टू-डू सूची एप्लिकेशन

  2. विशिष्ट उपसर्ग के साथ कई तालिकाओं पर विशेषाधिकार प्रदान करें

  3. कैसे mysql क्वेरी से अजगर स्क्रिप्ट चलाने के लिए?

  4. MYSQL में सभी तालिकाओं से डेटा हटाएं

  5. ग्रुप बाय से पहले MySQL ऑर्डर