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

मेरा पीडीओ स्टेटमेंट काम नहीं करता

कभी-कभी आपका पीडीओ कोड एक त्रुटि उत्पन्न करता है जैसे Call to a member function execute() या इसी के समान। या बिना किसी त्रुटि के भी लेकिन क्वेरी समान रूप से काम नहीं करती है। इसका मतलब है कि आपकी क्वेरी निष्पादित करने में विफल रही।

हर बार कोई क्वेरी विफल होने पर, MySQL में एक त्रुटि संदेश होता है जो कारण बताता है . दुर्भाग्य से, डिफ़ॉल्ट रूप से ऐसी त्रुटियों को PHP में स्थानांतरित नहीं किया जाता है, और आपके पास ऊपर उल्लिखित एक मौन या एक गुप्त त्रुटि संदेश है। इसलिए आपको MySQL त्रुटियों की रिपोर्ट करने के लिए PHP और PDO को कॉन्फ़िगर करना बहुत महत्वपूर्ण है। और एक बार जब आप त्रुटि संदेश प्राप्त कर लेते हैं, तो समस्या को ठीक करने के लिए कोई दिमाग नहीं होगा।

समस्या के बारे में विस्तृत जानकारी प्राप्त करने के लिए, कनेक्ट के ठीक बाद अपने कोड में निम्न पंक्ति डालें

$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

(जहां $dbh आपके पीडीओ आवृत्ति चर का नाम है) या - बेहतर - इस पैरामीटर को कनेक्शन विकल्प . उसके बाद सभी डेटाबेस त्रुटियों को पीडीओ अपवादों में अनुवादित किया जाएगा, जो कि अगर अकेला छोड़ दिया जाता है, तो वह नियमित PHP त्रुटियों के रूप में कार्य करेगा।

इस बात की बहुत कम संभावना है कि कुछ विशिष्ट त्रुटि के मामले में कोई अपवाद नहीं फेंका जाएगा। अगर आपकी query() /prepare() या execute() कॉल रिटर्न false लेकिन कोई अपवाद नहीं है, PDO::errorInfo() की जांच करें इस तरह,

 trigger_error("PDO errorInfo: ".$dbh->errorInfo());

एरर मैसेज मिलने के बाद आपको उसे पढ़ना और समझना है। यह बहुत स्पष्ट लगता है, लेकिन शिक्षार्थी अक्सर अर्थ . को अनदेखा कर देते हैं त्रुटि संदेश का। फिर भी अधिकांश समय यह समस्या को बहुत सरलता से समझाता है:

  • कहते हैं, अगर यह कहता है कि कोई विशेष तालिका मौजूद नहीं है, तो आपको वर्तनी, टाइपो, अक्षर केस की जांच करनी होगी। आपको यह भी सुनिश्चित करना होगा कि आपकी PHP स्क्रिप्ट एक सही डेटाबेस से जुड़ती है
  • या, यदि यह कहता है कि SQL सिंटैक्स में कोई त्रुटि है, तो आपको अपने SQL की जांच करनी होगी। और समस्या का स्थान ठीक पहले . है त्रुटि संदेश में उद्धृत क्वेरी भाग।

आपको विश्वास भी करना होगा त्रुटि संदेश। यदि यह कहता है कि टोकन की संख्या बाध्य चर की संख्या से मेल नहीं खाती तो यह है इसलिए। वही अनुपस्थित टेबल या कॉलम के लिए जाता है। पसंद को देखते हुए, चाहे वह आपकी अपनी गलती हो या त्रुटि संदेश गलत हो, हमेशा पहले वाले से चिपके रहें। फिर से यह कृपालु लगता है, लेकिन इस साइट पर सैकड़ों प्रश्न इस सलाह को अत्यंत उपयोगी साबित करते हैं।

ध्यान दें कि पीडीओ त्रुटियों को देखने के लिए, आपको सामान्य रूप से PHP त्रुटियों को देखने में सक्षम होना चाहिए। ऐसा करने के लिए, आपको साइट के वातावरण पर निर्भर PHP को कॉन्फ़िगर करना होगा:

  • एक विकास . पर सर्वर स्क्रीन पर त्रुटियों को ठीक करना बहुत आसान है, जिसके लिए त्रुटियों को प्रदर्शित करना चालू करना होगा:

    error_reporting(E_ALL);
    ini_set('display_errors',1);
    
  • लाइव . के दौरान साइट, सभी त्रुटियों को लॉग किया जाना चाहिए, लेकिन कभी नहीं दिखाया जाना चाहिए ग्राहक के लिए। इसके लिए PHP को इस तरह से कॉन्फ़िगर करें:

    error_reporting(E_ALL);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    

ध्यान दें कि error_reporting E_ALL . पर सेट होना चाहिए हर समय।

यह भी ध्यान दें कि सामान्य भ्रम के बावजूद, त्रुटि रिपोर्टिंग के लिए किसी भी प्रयास-पकड़ का उपयोग नहीं किया जाना चाहिए . PHP आपको पहले से ही पीडीओ त्रुटियों की रिपोर्ट करेगा, और एक तरह से बेहतर रूप में। एक न आया हुआ अपवाद विकास के लिए बहुत अच्छा है, फिर भी यदि आप एक अनुकूलित त्रुटि पृष्ठ दिखाना चाहते हैं, तब भी इसके लिए ट्राइ कैच का उपयोग न करें, लेकिन बस एक कस्टम त्रुटि हैंडलर . संक्षेप में, आपको पीडीओ त्रुटियों को कुछ विशेष मानने की आवश्यकता नहीं है, बल्कि उन्हें अपने कोड में किसी अन्य त्रुटि के रूप में मानें।

पी.एस.
कभी-कभी कोई त्रुटि नहीं होती है लेकिन कोई परिणाम भी नहीं होता है। तो इसका मतलब है, आपके मानदंड से मेल खाने के लिए कोई डेटा नहीं है . तो आपको इस तथ्य को स्वीकार करना होगा, भले ही आप डेटा की कसम खा सकते हैं और मानदंड ठीक हैं। वो नहीं हैं। आपको उन्हें दोबारा जांचना होगा। मेरे पास संक्षिप्त उत्तर है जो आपको मिलान करने वाली समस्या को इंगित करने में मदद करेगा, डेटाबेस में मिलान पंक्तियों के साथ समस्या होना पीडीओ का उपयोग करना . बस इस निर्देश और लिंक किए गए ट्यूटोरियल का चरण दर चरण पालन करें और या तो अपनी समस्या का समाधान करें या स्टैक ओवरफ़्लो के लिए एक जवाबदेह प्रश्न पूछें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मिलीसेकंड सटीकता के साथ टाइमस्टैम्प:उन्हें MySQL में कैसे सहेजना है

  2. MySQL में UNION का उपयोग करते समय "ERROR 1222 (21000) को ठीक करें:उपयोग किए गए SELECT स्टेटमेंट में कॉलम की एक अलग संख्या होती है"

  3. विंडोज़ पर xampp के लिए कमांड लाइन का उपयोग कैसे करें

  4. MySQL POW () फ़ंक्शन - किसी अन्य मान की शक्ति के लिए एक मान बढ़ाएँ

  5. MySql को दैनिक, साप्ताहिक, मासिक और वार्षिक आधार पर रिकॉर्ड या डेटा मिलता है