2009-04-13 12 views
9

इसलिए मैं अपने वेब ऐप के लिए एक इंस्टॉलर स्थापित कर रहा हूं, और डेटाबेस प्रमाण-पत्रों के लिए इनपुट फ़ील्ड रखता हूं। मेरी सत्यापन प्रक्रिया का हिस्सा डेटाबेस कनेक्शन का परीक्षण करना (PHP की पीडीओ लाइब्रेरी का उपयोग करना) शामिल है। यदि कनेक्शन विफल रहता है, तो मैं खराब पासवर्ड, खराब पता, nonexistent डेटाबेस नाम इत्यादि के बीच अंतर करने में सक्षम होना चाहता हूं, इसलिए मैं फ़ॉर्म पर उचित इनपुट फ़ील्ड का संदर्भ दे सकता हूं।संभावित पीडीओएक्सप्शन त्रुटियां (MySQL 5)?

क्या कोई मुझे ऐसे संदर्भ की ओर इंगित कर सकता है जो पीडीओएक्सप्शन के साथ वापस आने वाले संभावित त्रुटि कोड/संदेशों को रेखांकित करता है?

संपादित करें: यह मेरे लिए हुआ कि ये त्रुटि कोड/संदेश शायद डेटाबेस-विशिष्ट हैं और मूल डेटाबेस कोड/त्रुटियां आसानी से पारित हो सकती हैं। यदि ऐसा है, तो मैं वर्तमान में केवल MySQL 5 डेटाबेस के साथ काम कर रहा हूं।

उत्तर

14

MySQL दस्तावेज़ error codes के लिए पूर्ण संदर्भ है।

1000 से शुरू होने वाले त्रुटि कोड server errors हैं।

  • त्रुटि:: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) संदेश: पहुँच उपयोगकर्ता '% s' @ '% s' के लिए इनकार किया (पासवर्ड का उपयोग करें:% s)

  • त्रुटि इन की तरह त्रुटियों में शामिल : 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) संदेश: अज्ञात डेटाबेस '% s'

त्रुटि 2000 में शुरू होने वाले कोड client errors हैं।

  • त्रुटि:: 2005 (CR_UNKNOWN_HOST) संदेश: अज्ञात MySQL सर्वर होस्ट '% s' (% d)

  • त्रुटि: 2003 (CR_CONN_HOST_ERROR) संदेश: से कनेक्ट नहीं कर इन की तरह त्रुटियों में शामिल '% s' (% d)

मैं, सभी संभव त्रुटियों को सूचीबद्ध करने क्योंकि वे पहले से प्रलेखित रहे हैं नहीं जा रहा हूँ, और मैं नहीं जानता कि कौन-कौन से संभालने की ज़रूरत है पर MySQL सर्वर। उदाहरण के लिए, 2001 और 2002 की त्रुटियां यूनिक्स सॉकेट कनेक्शन के लिए विशिष्ट हैं, जो आपके लक्षित प्लेटफ़ॉर्म के लिए अप्रासंगिक हो सकती हैं।

और PDO::errorInfo() का उपयोग PDOException संदेश के बजाय उपयोग करना न भूलें।


अपनी टिप्पणी पुन getCode() के बारे में - नहीं, यह है कि रास्ते में समर्थित होना प्रतीत नहीं होता। मैंने var_dump()PDOException पर एक त्वरित परीक्षण किया था। दुर्भाग्यवश, इसका कोड सरल "0" है, भले ही त्रुटि कोड और SQLSTATE अपवाद संदेश में शामिल हैं।

Exception::getCode() PHP संस्करण 5.1.0 के रूप में आधार Exception कक्षा का हिस्सा है। यह इस ऑब्जेक्ट फ़ील्ड का उपयोग करने के लिए संबंधित पीडीओ चालक कार्यान्वयन पर निर्भर है। कम से कम MySQL ड्राइवर के लिए, वे स्पष्ट रूप से नहीं किया था।

+2

क्या पीडीओएक्सप्शन :: getCode() पीडीओ :: errorCode() के समान कोड लौटाता है? – Wilco

+0

http://www.php.net/manual/en/class.pdoexception.php#pdoexception.props.code के अनुसार 'पीडीओ-> getCode()' विधि को SQLSTATE त्रुटि कोड वापस करना चाहिए। –

-7

मैं पीडीओ बारे में निश्चित नहीं हूँ, लेकिन आप mysql_error() समारोह जो कुछ इस तरह देता है का उपयोग कर सकते हैं:

  • Access denied for user youruser@yourserver
  • Unable to select database
  • ...etc

फिर आप इन त्रुटियों को सीधे उपयोगकर्ता के लिए, प्रदर्शन या एक सूची प्राप्त करने के चारों ओर खेल सकते हैं सभी संभावित त्रुटियों में से, और सीधे त्रुटि का कारण निर्धारित करें।

संबंधित मुद्दे