मुख्य भाग है पीडीओ को अपवाद मोड में सेट करना, जबकि केवल रोलबैक करने के लिए ट्राइ-कैच होना अनावश्यक है। इस प्रकार, आपका कोड बिल्कुल ठीक है, यदि आप चाहते हैं कि विफलता पर रोलबैक हो तो इसे बदलने की कोई आवश्यकता नहीं है, जब तक आपके पास यह लाइन कहीं है:
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
विफलता के मामले में स्क्रिप्ट को समाप्त कर दिया जाएगा, कनेक्शन बंद कर दिया जाएगा और MySQL आपके लिए लेनदेन को वापस करने में प्रसन्न होगा।
यदि आप अभी भी मैन्युअल रूप से रोलबैक करना चाहते हैं, तो आपको इसे ठीक से करना चाहिए, जैसा कि अन्य उत्तरों में कहा गया है। सुनिश्चित करें कि
- आप
Exception
को पकड़ रहे हैं , नहींPDOException
, क्योंकि इससे कोई फ़र्क नहीं पड़ता कि किस विशेष अपवाद ने निष्पादन को निरस्त कर दिया - आप फिर से फेंक रहे हैं रोलबैक के बाद एक अपवाद, समस्या के बारे में सूचित करने के लिए
- यह भी कि एक टेबल इंजन लेनदेन का समर्थन करता है (यानी मैसकल के लिए यह इनो डीबी होना चाहिए, माईसाम नहीं)।
यह चेकलिस्ट मेरे लेख से ली गई है जो आपको इस या कई अन्य पहलुओं में भी उपयोगी लग सकता है।