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

php mysqli autocommit और रोलबैक का उचित उपयोग

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

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

आम तौर पर यह इस तरह से एक कोशिश/पकड़ ब्लॉक का उपयोग करके पूरा किया जाता है:

try {
    $dbconnect->autocommit(false);

    $stmt = $dbconnect->prepare("INSERT INTO `invoices`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val1,$val2);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `invoice_details`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val3,$val4);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `payments`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val5,$val6);
    $stmt->execute();

    $dbconnect->commit();
} catch(Exception $e){
    // undo everything that was done in the try block in the case of a failure.
    $dbconnect->rollback();

    // throw another exception to inform the caller that the insert group failed.
    throw new StorageException("I couldn't save the invoice");
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ActiveRecord3 गतिरोध पुनः प्रयास करें

  2. MySQL में आज के बराबर या उससे अधिक का डेटाटाइम

  3. OSX में डॉकर वॉल्यूम बढ़ते समय अनुमति अस्वीकार कर दी गई

  4. PHP में विशिष्ट उपयोगकर्ता का डेटा प्राप्त करें

  5. सी # MySQL कनेक्शन पूलिंग