چگونه از تراکنش ها در PHP استفاده کنیم؟!

در توضیحات قبلی گفتم که تراکنش در دیتابیس چیه و چه کاربردی داره پس اگه نمیدونید تراکنش چیه بهتره که ابتدا این پست رو بخونید و سپس برگردید به همین صفحه , همونطور که گفتم , ما مجموعه ای از کوئری های خودمون رو که به هم وابسته هستند میایم به عنوان تراکنش در نظر میگیریم. در تراکنش کوئری ها یا باید همشون درست اجرا بشن یا اینکه هیچکدوم اجرا نشه یا اگه اجرا شده تاثیراتش خنثی بشه!

در اینجا نحوه ی استفاده از تراکنش ها در mysqli و PDO رو به شما دوستان عزیز آموزش میدم . با من همراه باشید :

طریقه ی استفاده از تراکنش ها در mysqli :

برای استفاده از تراکنش ها در mysqli شما میتونید به صورت زیر عمل کنید:

برای شروع تراکنش میشه از autocommit یا begin_transaction استفاده کرد , اگه ورژن php شما بالاتر از ۵٫۵ هست هردوتابع برای شما کار میکنند اما اگه ورژن پی اچ پی شما کمتر از ۵٫۵ باشه فقط تابع autocommit رو در دسترس دارید , پس توی ورژن زیر ۵٫۵ میشه از یه روش تراکنش رو ایجاد کرد ولی توی ورژن بالاتر از ۵٫۵ میشه از دو روش تراکنش رو ایجاد کرد.

در مثال بالا ابتدا اومدیم و ابتدا با استفاده از دستور mysqli_connect به دیتابیس متصل شدیم و سپس با استفاده از متد autocommit باعث شروع چیزی شبیه تراکنش شدیم. بعد از اجرای همه ی دستوراتمون اگه همه به درستی اجرا شدن(میتونیم مقدار برگشتی از دستورات رو چک کنیم) میایم و تغییرات ایجاد شده از دستورات رو با استفاده از commit تایید میکنیم , دستور commit در صورت درست اجرا شدن مقدار true رو برمیگردونه و به معنای این هست که تغییرات با موفقیت تایید شده , در غیر این صورت مقدار False برگردونده میشه که نشون میده قادر به تایید تغییرات نیست. به همین سادگی 😀

برای اینکه دستورات رو خنثی کنید (مگه بمبه!) میتونید از mysqli_rollback استفاده کنید , به مثال زیر نیز دقت کنید:

در مثال بالا اگه یکی از دستورات ما به درستی اجرا نشن mysqli_rollback رو اجرا میکنیم تا تغییرات ایجاد شده بر روی پایگاه داده ی ما خنثی بشه. با اجرای دستور rollback تراکنش برمیگرده به نقطه ی شروعش و تغییراتی از قبیل update , insert و … خنثی میشن (تغییراتی مثل drop کردن دیتابیس یا جدول ها خنثی شدنی نیست! حواستون باشه).

شما در ورژن php بالاتر از ۵٫۵ میتونید از دستور begin_transaction و autocommit استفاده کنید , تفاوت زیادی با هم ندارند , نحوه ی استفاده از autocommit رو بهتون گفتم , حالا به نحوه ی استفاده از begin_transaction دقت کنید:

در حالت شی گرا نیز برای استفاده از autocommit میتونید به صورت زیر عمل کنید:

استفاده از begin_transaction در حالت شی گرا در mysqli نیز به صورت زیر است:

در مثال بالا ابتدا یک شی از نوع mysqli ساختیم و بعدش با استفاده از اون شی متد (تابع) beign_transaction رو استفاده کردیم 😀 به همین راحتی. دوستان عزیز دقت کنید که در اخر اگه میخواید تغییرات شما اعمال بشه باید متد commit رو اجرا کنید و اگه میخواید که تغییرات خنثی بشه باید متد rollback رو اجرا کنید.

برای استفاده از تراکنش ها در PDO میتونید به صورت زیر عمل کنید:

فعالسازی تراکنش در PDO با استفاده از beginTransaction :

با دستور rollback میتونید تغییرات رو خنثی کنید یا اینکه با دستور commit تاییدش تا ذخیره بشه 😀

دوستان عزیز من اموزش استفاده از تراکنش در PHP رو از اینجا (کلیک کنید) براتون به زبان ساده ترجمه کردم 😀 اگه میخواید اصل مقاله رو بخونید میتونید به اون یه نگاهی بندازید.

کسانی که سوال دارند از بخش نظرات مطرح کنند تا پاسخ بدم. موفق باشیییییییید.

به اشتراک بگذارید:Email this to someoneShare on FacebookTweet about this on TwitterShare on Google+Digg thisShare on LinkedInPin on PinterestShare on StumbleUponFlattr the authorShare on RedditBuffer this pageShare on TumblrPrint this pageShare on YummlyShare on VK
  1. نه باریکلا
    نننهههه باریکلا
    نننننننههههههه باریکلا
    نننننننننننننهههههههههه باریکلا
    .
    .
    .

  2. علی طبا

    سلام
    در مورد کارکردن با sp در php,mysql هم توضیح بدید لطفا

    • سلام. چشم , در چند روز آینده در مورد توابع SP نیز اموزش هایی خواهم گذاشت. ممنون از اینکه پیشنهاد دادید. پیشنهاد های دوستان عزیز رو پذیرا هستیم. لطفا نظرات و اموزش هایی که لازم دارید رو بگید تا براتون بزاریم. موفق باشید.

  3. سلام ممنون از اموزشتون من می خواستم بدون وقتی تو pdo از تراکنش استفاده کردیم اگه به فرض یکی از query ها انجام نشد خودکار اطلاعات رو به حالت قبلی برمیگردونه یا باید تک تک query ها رو خودمون چک کنیم و اگر یکیشون اشتباه بو خودمون دستی از دستور roolback استفاده کنیم.

    یه سوال دیگه تو خط اخر حتما باید از دستور $connection->comit() استفاده کنیم

    ببخشد اگه سوالم زیاد شد 🙂

    • شما باید با استفاده از دستور rowCount چک کنید اگه تغییرات انجام نشد و یا اینکه داده طبق خواسته شما حذف و یا اظافه نشد دستور rollBack رو اجرا کنید. در اخر نیز در صورتی که همه چیز صحیح و طبق خواسته ی شما بود باید دستور commit رو اجرا کنید تا تغییرات ثبت بشه در غیر این صورت تغییرات اعمال نخواهد شد. به دستوراتی که اتوماتیک تابع commit رو اجرا میکنند نیز دقت کنید(مثلا دستورات Drop).
      همچنین میتونید دستورات رو داخل try قرار بدید و در هنگامی که خطا رخ میده برنامه به قسمت Catch خواهد رفت و شما میتونید rollBack کنید 😀 ترفند زیاد هست ولی بدونید که همه چیز رو خودتون باید چک کنید و اگه درست بود commit کنید.

می‌خواهید دیدگاهتان را بیان کنید؟