نبدا على بركة الله
عنوان الدرس: Mysql Transactions
مقدمة:
هل واجهت في يوم من الايام، انك تريد تنفيذ مجموعة اوامر mysql متتالية
بحيث تريد ان يتم تنفيذها كلها، او في حال حصل خطأ ان يتم ايقافها كلها؟ الجواب طبعا نعم
تخيل مثلا موقع امازون، عندما تقدم طلب شراء ، فانه يتم عمل استعلامين، الاول هو وضع سجل لتحويل البضائع اليك، والامر الثاني وضع المبلغ المستحق عليك في قاعدة البيانات، تخيل ان يتم وضع الاول، وبعدها يحصل فشل في السيرفر ويتسجل المبلغ المستحق 0، طبعا ستكون كارثة لو الامور بتجري على هذا النحو.
مثال اخر:
تخيل عملية تحويل مال من حساب الى حساب اخر في البنك
تريد تنقل مثلا 1000 دولار من حساب الى حساب
بدا الاستعلام الاول، وتم خصم 1000 من الحساب الاول
وحين بدا الاستعلام الثاني المسؤول عن الاضافة للحساب الاخر، حصل خطا معين وتوقع النظام
فحينها ستخصم ال 1000 ولن تضاف الى مكان اخر ، لذلك طبعا هذه الامور لا بد من تامينها
التطبيق:http://www.starsat2014.01lx.net/index.php
تطبيق الموضوع سهل جدا، يتطلب منك شيء بسيط جدا، ولا يتطلب تعديلات كبيرة على الكود الموجود اصلا
بداية لا بد من معرفة 3 مصطلحات
Begin: هي لحظة بداية ال transaction
Commit: في حال نجح الاستعلام، نريد تطبيق النتائج على قاعدة البيانات
rollback: في حال حصل خلل، نرجع للحالة الاصلية قبل تنفيذ الاستعلامات جميعها
مثال على استعلام بدون ترانزاكشن
الطريقة عادية ومعلومة للجميع
رمز PHP:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
لكن عند اضافة الترانزاكشن
بشكل بسيط
رمز PHP:
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
نلاحظ اننا بدانا بجملة begin
ثم نفذنا الاستعلامات، ثم تحققنا من وجود خطا، في حال حصل، بنعمل rollback
في حال كان عدم وجود خلل، بنعمل commit
اي نفذ الامر
لكن طريقة الكود السابق، تتميز بالبساطة وعدم الاحتراف
لذلك خلينا نطور الكود قليلا باستخدام محبوبة المبرمجين Try catch
رمز PHP:
الكود بسيط طبعا
مقدمة:
هل واجهت في يوم من الايام، انك تريد تنفيذ مجموعة اوامر mysql متتالية
بحيث تريد ان يتم تنفيذها كلها، او في حال حصل خطأ ان يتم ايقافها كلها؟ الجواب طبعا نعم
تخيل مثلا موقع امازون، عندما تقدم طلب شراء ، فانه يتم عمل استعلامين، الاول هو وضع سجل لتحويل البضائع اليك، والامر الثاني وضع المبلغ المستحق عليك في قاعدة البيانات، تخيل ان يتم وضع الاول، وبعدها يحصل فشل في السيرفر ويتسجل المبلغ المستحق 0، طبعا ستكون كارثة لو الامور بتجري على هذا النحو.
مثال اخر:
تخيل عملية تحويل مال من حساب الى حساب اخر في البنك
تريد تنقل مثلا 1000 دولار من حساب الى حساب
بدا الاستعلام الاول، وتم خصم 1000 من الحساب الاول
وحين بدا الاستعلام الثاني المسؤول عن الاضافة للحساب الاخر، حصل خطا معين وتوقع النظام
فحينها ستخصم ال 1000 ولن تضاف الى مكان اخر ، لذلك طبعا هذه الامور لا بد من تامينها
هذه الترانزاكشنز او التحويلات
نجدها دائما في العمليات البرمجية الحساسة
في البنوك ، في التجارة الالكترونة، انظمة مراقبة البضائع .... الخ
الان يكفي كلاما، ولنتجه الى التطبيق
نجدها دائما في العمليات البرمجية الحساسة
في البنوك ، في التجارة الالكترونة، انظمة مراقبة البضائع .... الخ
الان يكفي كلاما، ولنتجه الى التطبيق
التطبيق:http://www.starsat2014.01lx.net/index.php
تطبيق الموضوع سهل جدا، يتطلب منك شيء بسيط جدا، ولا يتطلب تعديلات كبيرة على الكود الموجود اصلا
بداية لا بد من معرفة 3 مصطلحات
Begin: هي لحظة بداية ال transaction
Commit: في حال نجح الاستعلام، نريد تطبيق النتائج على قاعدة البيانات
rollback: في حال حصل خلل، نرجع للحالة الاصلية قبل تنفيذ الاستعلامات جميعها
مثال على استعلام بدون ترانزاكشن
الطريقة عادية ومعلومة للجميع
رمز PHP:
- الكود:
mysql_query("delete from abc where id=2")
mysql_query("update abc where id=4")
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
لكن عند اضافة الترانزاكشن
بشكل بسيط
رمز PHP:
- الكود:
mysql_query("begin")
mysql_query("delete from abc where id=2")
mysql_query("update abc where id=4")
if (mysql_error())
mysql_query("rollback")
else
mysql_query("commit")
[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
نلاحظ اننا بدانا بجملة begin
ثم نفذنا الاستعلامات، ثم تحققنا من وجود خطا، في حال حصل، بنعمل rollback
في حال كان عدم وجود خلل، بنعمل commit
اي نفذ الامر
لكن طريقة الكود السابق، تتميز بالبساطة وعدم الاحتراف
لذلك خلينا نطور الكود قليلا باستخدام محبوبة المبرمجين Try catch
رمز PHP:
- الكود:
try {
mysql_query("begin");
mysql_query('first query');
mysql_query('second query');
mysql_query('third query');
mysql_query("commit");
} catch (Exception $e) {
mysql_query("rollback");
}
http://www.starsat2014.01lx.net/index.php
ومفهوم اكثر من الكود السابق
بهذا نكون وصلنا الى نهاية درسنا لليوم
اسال الله ان تكونوا قد استفدتم واستمتعتم
اي استفسار حياكم الله
ونراكم في درس قادم ان شاء الله
والسلام عليكم ورحمة الله وبركاته
اسال الله ان تكونوا قد استفدتم واستمتعتم
اي استفسار حياكم الله
ونراكم في درس قادم ان شاء الله
والسلام عليكم ورحمة الله وبركاته