الآن بعد أن أصبحت متصلاً من خلال شركة تنمية نفط عمان، قبل البدء في الاستعلام، يجب عليك أولاً فهم كيفية إدارة شركة تنمية نفط عمان للمعاملات.
تدعم المعاملات أربع خصائص رئيسية (ACID):
الذرية
تناسق
عزل
متانة
بعبارات الشخص العادي، أي عملية يتم إجراؤها ضمن معاملة، حتى لو تم إجراؤها على مراحل، يتم ضمان تطبيقها بأمان على قاعدة البيانات وتنفيذها دون تدخل من الاتصالات الأخرى.
يمكن أيضًا التراجع عن عمليات المعاملات تلقائيًا عند الطلب (على افتراض أنها لم يتم تنفيذها بعد)، مما يجعل معالجة الأخطاء في البرامج النصية أسهل.
يتم تنفيذ المعاملات عادةً من خلال "تجميع" مجموعة من التغييرات وجعلها فعالة في نفس الوقت؛ وميزة القيام بذلك هي أنه يمكن أن يؤدي إلى تحسين كفاءة هذه التغييرات بشكل كبير.
بمعنى آخر، يمكن للمعاملات أن تجعل البرامج النصية أسرع وربما أكثر قوة (على الرغم من ضرورة استخدام المعاملات بشكل صحيح للحصول على مثل هذه الفوائد).
لسوء الحظ، لا تدعم كل قاعدة بيانات المعاملات، لذلك تحتاج شركة PDO إلى التشغيل في ما يسمى بوضع "الالتزام التلقائي" عند فتح الاتصال لأول مرة.
يعني وضع الالتزام التلقائي أن كل تشغيل استعلام له معاملة ضمنية خاصة به إذا كانت قاعدة البيانات تدعمها، أو لا شيء إذا كانت قاعدة البيانات لا تدعم المعاملات.
إذا كانت المعاملة مطلوبة، فيجب أن تبدأ باستخدام طريقة PDO::beginTransaction(). إذا كان برنامج التشغيل الأساسي لا يدعم المعاملات، فسيتم طرح PDOException (هذه حالة خطأ جسيمة بغض النظر عن إعدادات معالجة الأخطاء).
بمجرد بدء المعاملة، يمكن إكمالها باستخدام PDO::commit() أو PDO::rollBack()، اعتمادًا على ما إذا كان الكود الموجود في المعاملة قد تم تشغيله بنجاح.
ملاحظة: تتحقق شركة PDO فقط مما إذا كانت لديها إمكانات المعاملات في طبقة برنامج التشغيل. إذا كانت بعض حالات وقت التشغيل تعني أن المعاملة غير متوفرة، وتقبل خدمة قاعدة البيانات طلبًا لبدء معاملة، فستظل PDO::beginTransaction() تُرجع القيمة TRUE بدون أخطاء. من الأمثلة الجيدة على ذلك محاولة استخدام المعاملات في جدول MyISAM في قاعدة بيانات MySQL.
عندما ينتهي البرنامج النصي أو يكون الاتصال على وشك الإغلاق، وإذا كانت هناك معاملة معلقة، فسوف تقوم شركة تنمية نفط عمان بإرجاع المعاملة تلقائيًا. يساعد إجراء الأمان هذا على تجنب حالات عدم الاتساق إذا تم إنهاء البرنامج النصي بشكل غير متوقع - إذا لم يتم الالتزام بالمعاملة بشكل صريح، فمن المفترض أن هناك خطأ ما، لذلك يتم تنفيذ التراجع للحفاظ على أمان البيانات.
ملاحظة: قد يحدث التراجع التلقائي فقط بعد بدء المعاملة عبر PDO::beginTransaction(). إذا قمت بإصدار استعلام يدويًا لبدء معاملة، فلن يكون لدى شركة تنمية نفط عمان أي طريقة لمعرفة ذلك ولا يمكنها التراجع عنه إذا لزم الأمر.
تنفيذ المعالجة المجمعة في المعاملة:
في المثال التالي، افترض أنه تم إنشاء مجموعة من الإدخالات لموظف جديد وتعيين معرف 23. بالإضافة إلى تسجيل البيانات الأساسية للشخص، من الضروري أيضًا تسجيل راتبه.
من السهل إجراء كلا التحديثين بشكل منفصل، ولكن من خلال تضمينهما في استدعاءات PDO::beginTransaction() وPDO::commit()، فإنك تضمن عدم تمكن أي شخص آخر من رؤية التغييرات حتى تكتمل.
في حالة حدوث خطأ، تقوم كتلة الالتقاط باستعادة جميع التغييرات التي حدثت منذ بدء المعاملة وتطبع رسالة خطأ.
<?phptry { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connectedn";} Catch (استثناء $e) { die("غير قادر على الاتصال: " . $e->getMessage());}try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("أدخل في قيم الموظفين (المعرف، الأول، الأخير)" (23، 'Joe). ', 'Bloggs')"); $dbh->exec("أدخل في قيم تغيير الرواتب (المعرف، المبلغ، التغيير) (23، 50000, NOW())")); $dbh->commit(); } Catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage();}?>
لا يقتصر الأمر على إجراء تغييرات ضمن المعاملة، بل يمكنك أيضًا إصدار استعلامات معقدة لاستخراج البيانات، ويمكنك استخدام تلك المعلومات لإنشاء المزيد من التغييرات والاستعلامات عندما تكون المعاملة نشطة، ويمكنك ضمان عدم تمكن الآخرين من إجراء تغييرات أثناء العملية جارية.