• 3.1.9
  • کامل شده
  • منقضی شده
این داکیومنت از طرف توسعه‌دهنده ساپورت نمی‌شود، جدیدترین ورژن داکیومنت بزودی ترجمه خواهد شد.

Transaction مجموعه‌ای از عملیات دیتابیس است که باید به‌صورت یک واحد منطقی اجرا شوند. اگر همه مراحل موفق باشند Commit انجام می‌شود و اگر یکی از مراحل شکست بخورد Rollback تغییرات را برمی‌گرداند. این سازوکار برای ثبت سفارش، کاهش موجودی و ثبت پرداخت اهمیت زیادی دارد.

ساختار و API اصلی

CodeIgniter 3 دو شیوه ساده و دستی دارد. در روش ساده از trans_start() و trans_complete() استفاده می‌کنید. در روش دستی trans_begin()، trans_commit() و trans_rollback() کنترل کامل‌تری می‌دهند. trans_status() وضعیت موفقیت عملیات را بررسی می‌کند.

نمونه استفاده

 $this->db->trans_begin();
 $this->db->insert('orders', $order);
 $this->db->set('stock', 'stock - 1', FALSE)
     ->where('id', $productId)->update('products');
 if ($this->db->trans_status() === FALSE) {
     $this->db->trans_rollback();
 } else {
     $this->db->trans_commit();
 }

نکته مهم

در Transaction عملیات شبکه، ارسال ایمیل یا کار زمان‌بر انجام ندهید. پشتیبانی واقعی Transaction به موتور و Storage Engine دیتابیس وابسته است.

مطالعه مرتبط

برای ادامه مطالعه، MVC، کوئری، ترنزکشن را ببینید.

متدهای Transaction

متد یا مفهومکاربرد
trans_start() و trans_complete()مدیریت ساده Transaction.
trans_begin()شروع دستی.
trans_commit()ثبت نهایی تغییرات.
trans_rollback()بازگرداندن تغییرات.
trans_status()بررسی موفقیت عملیات.
trans_strict()رفتار Transactionهای متوالی.

نکات عملی برای دیتابیس

پیش از استفاده در محیط واقعی، Driver و نسخه موتور دیتابیس را با قابلیت‌های موردنیاز تطبیق دهید. Queryهای دارای ورودی کاربر باید Binding داشته باشند، عملیات چندمرحله‌ای باید در Transaction قرار بگیرند و برای Queryهای پرتکرار، Index و Execution Plan بررسی شود. تعداد Queryها و حجم Result نیز روی حافظه و زمان پاسخ اثر دارد.

برای عیب‌یابی، SQL تولیدشده، تعداد ردیف‌های متاثر و زمان اجرا را در محیط توسعه ثبت کنید. در Production اطلاعات محرمانه را از Log حذف کنید و خطاهای دیتابیس را به کاربر نشان ندهید. اگر ساختار جدول تغییر می‌کند، تغییر را نسخه‌بندی و پیش از اجرا Backup بگیرید.

در بازبینی کد، ترتیب و نتیجه متدهای trans_start() و trans_complete()، trans_begin()، trans_commit()، trans_rollback() را بررسی کنید. نام متد به‌تنهایی تضمین نمی‌کند ورودی معتبر یا خروجی امن باشد، بنابراین رفتار هر متد را با تست و مستندات همان نسخه کنترل کنید.

سایر پست های داکیومنت