खैर, मेरे पास 2 अद्वितीय इंडेक्स फ़ील्ड वाली एक टेबल है: email
तथा doc
। जब डुप्लिकेट कुंजी सम्मिलन का पता चला है तो मुझे उपयोगकर्ता को सतर्क करने की आवश्यकता है। मैं इसका उपयोग कर कर सकता हूँ:
...
catch(PDOException $e) {
if($e->getCode() == 1062)
...
}
लेकिन मुझे नहीं पता कि कौन सी अनुक्रमणिका ने इस त्रुटि को ट्रिगर किया है। क्या पता लगाने का कोई तरीका है?
मैंने Google पर पाया कि आप इसे के माध्यम से कर सकते हैं getMessage()
फ़ंक्शन, लेकिन ऐसा प्रतीत होता है कि MySQL के कुछ संस्करण कुछ वापस लौटते हैं key 1
, जबकि अन्य वापस आते हैं name_of_key
, जो इस के साथ काम करना मुश्किल बनाता है। क्या मुझे डालने से पहले एक चयन करने की ज़रूरत है? यह बदसूरत लग रहा है।
धन्यवाद।
उत्तर:
जवाब के लिए 0 № 1इस क्रॉस-वर्जन को करने के लिए, आपको वास्तव में INSERT से पहले एक चयन करने की आवश्यकता है। जब तक आप उचित ताले बनाते हैं, तब तक आप दौड़ के बिना सम्मिलित होने से पहले एक चयन कर सकते हैं।
सर्वोत्तम प्रदर्शन के लिए, इनो डीबी का उपयोग करें और "चुनें ... अद्यतन के लिए "क्योंकि इसमें पंक्ति-स्तर लॉकिंग की सुविधा है। चयन ... अद्यतन के लिए पंक्ति मौजूद है या पंक्ति के लिए" अंतराल "अगर यह नहीं है। चयन का उपयोग न करें ... साझा करने में लॉक करें मोड क्योंकि इससे पठित ताले बनाए जाएंगे जिन्हें ताले लिखने के लिए अपग्रेड करना होगा, और एक डेडलॉक हो सकता है।
यदि MyISAM का उपयोग तालिका को लॉक करने के लिए LOCK तालिका का उपयोग करें ताकि केवल एक थ्रेड इसे एक्सेस कर सके। - http://dev.mysql.com/doc/refman/4.1/en/lock-tables.html