शायद यह सवाल पहले से ही पूछा जा चुका है, लेकिन मुझे वास्तव में यह नहीं पता कि इसे कैसे खोजा जाए:क्या मुझे php के साथ एक अनूठी बाधा जांचनी चाहिए?
मेरे पास पोस्टग्रेस-टेबल "ग्राहक" हैं, और प्रत्येक ग्राहक का अपना अद्वितीय नाम है। इसे प्राप्त करने के लिए, मैंने इस कॉलम में एक अद्वितीय-बाधा जोड़ा।
मैं php के साथ तालिका तक पहुंचता हूं।
जब उपयोगकर्ता अब एक नया ग्राहक बनाने की कोशिश करता है, जो पहले से ही लिया गया है, डेटाबेस कहता है "इंटेग्रिटी कॉन्स्ट्रेंट उल्लंघन", और PHP एक त्रुटि फेंकता है।
मैं क्या करना चाहता हूं एचटीएमएल-इनपुट-फ़ील्ड में एक त्रुटि दिखाने के लिए: "ऐसा होता है जब ग्राहक-नाम पहले ही लिया जाता है"।
मेरा सवाल यह है कि मुझे यह कैसे करना चाहिए।
क्या मुझे पीडीओ-अपवाद पकड़ना चाहिए, जांचें कि क्या त्रुटि-कोड "अद्वितीय विघटन" है, और अपवाद-संदेश के अनुसार एक संदेश प्रदर्शित करने से, या मुझे अतिरिक्त विवरण के साथ डुप्लिकेट नामों की जांच करनी चाहिए एक नई पंक्ति डालने का प्रयास करें?
बेहतर अभ्यास क्या है? एक और एसक्यूएल-कथन बनाना, या त्रुटि-कोड को पकड़ना और विश्लेषण करना।
संपादित करें: मैं लेनदेन का उपयोग कर रहा है, और मैं किसी भी अपवाद को पकड़ने हूँ क्रम में रोलबैक करने के लिए। सवाल यह है कि, अगर मुझे अद्वितीय उल्लंघन का फ़िल्टर करना चाहिए तो वे रोलबैक नहीं लेते हैं।
EDIT2: मैं अपवाद-विधि का उपयोग कर रहा है, मैं क्रम में अपवाद-संदेश का विश्लेषण करने के लिए सुनिश्चित करें कि अद्वितीय-बाधा वास्तव में "नाम" -column के अंतर्गत आता है के लिए होगा।
["23505",7,"FEHLER: doppelter Schlüsselwert verletzt Unique-Constraint <customers_name_unique>\nDETAIL: Schlüssel <(name)=(test)> existiert bereits."]
स्तंभ के बारे में जानकारी प्राप्त करने के लिए एक ही रास्ता है, तो "customers_name_unique" मौजूद है की जाँच करने के (यह अद्वितीय-बाधा के नाम है) है:
यह सब कुछ मैं अपवाद से मिलता है।
लेकिन जैसा कि आप यह भी देख सकते हैं, संदेश जर्मन में है, इसलिए आउटपुट सिस्टम पर निर्भर करता है/बदल सकता है।
शायद आपको यह देखना चाहिए: http://stackoverflow.com/questions/7719039/php-duplicate-checking-before-insert – jmarceli