می خوام اعتبار پولی کاربرها رو توی وب سایت کم یا زیاد کنم، برای اینکار باید از تراکنش استفاده کرد ؟
می خوام اعتبار پولی کاربرها رو توی وب سایت کم یا زیاد کنم، برای اینکار باید از تراکنش استفاده کرد ؟
یعنی چی دقیقا میخوای چکار کنی اگه میخوی مثلا یک کاربری که 20000 تومن پول داره حالا مثلا یک جنس ازت خریده 15000 تومن بیاد و از اون مقدار اعتبار اول کم کنه راهش سادس اول مبلغ رو کم کن و حاصلش رو بجای مقدار 20000 بروز کن
$c=$a-$b
در مثال زیر شما 1200 ( تومان یا ریال یا ... ) رو به حساب کاربری فردی با آیدی 1 می افزایید :
$cash = 1200;
$add_cash = mysql_query ("UPDATE `users` SET `cash` = cash+$cash WHERE `user_id` = '1'");
این روشها یه مشکل داره و اونم اینکه اگر یه قسمت از نرم افزار بخواد به حساب کاربر پول واریز کنه و همزمان یه قسمت دیگه بخواد پول کم کنه احتمال محاسبات دچار اشتباه بشن، راه بهتر اینه که کوئری اول ردیف مورد نظر رو قفل کنه بعد کارهای مورد نیاز رو انجام بده اما نمی دونم چطور باید این کارو کرد!
باید وقتی میخای عملی رو فیلد پول انجام بدی اونو قفل کنی که اگه به طور اتفاقی عمل دیگه ایی قرار رو اون فیلد رخ بده منتظر این عمل بمونه .
این اتفاق خیلی مهمه مخصوصا تو سایت های بزرگ ممکنه یه موقعیتی پیش بیاد که یه عمل همزمان روی یه فیلد مهم انجام بشه ولی با قفل کردن یا ترنزیشن جلوشو میگرن .
وقتی قفل می کنید اگه درخواست دیگه ایی بیاد منتطر میمونه که قفل باز بشه .
یه نمونه قفل کردن
mysql_query("LOCK TABLES tablename WRITE|READ;");
mysql_query("UNLOCK TABLES;");
شما اگه مقداری فکر کنید متوجه می شید . همینطوری نیایید بگید چه لزومی داره اگه لزومی نداشت همچین چیزی رو اصلا نمیزاشتن معلومه شما حرفه ایی تا حالا کار نکردید .
تمام سایت های واسط پرداخت از این روش استفاده می کنند مثل جها پی یا پی لاین یا ......
تمام سایت های فروشگاهی از این روش استفاده می کنند مگه اینکه برنامه نویسی شون شخصی مثل شما باشه و در این مورد علم نداشته باشه .
قفل و ترنزکشن فوق العاده پر کاربرد تو حوضه وب سایت ها هستن
حوضه :حوزه ;)
شما باید از قفل ها (منظور کلیت عمل قفل هست) استفاده کنید به چند دلیل که مهمترینشون اینهاست
1- داده ها هنگام عملیات توسط سایرین دستکاری نشه
2- مطمئن بشید که کل عملیات با موفقیت انجام شده، و در غیر این صورت کل تغییرات به حالت قبل برگرده (مثلا پول کم بشه از کاربر ولی کالایی برای فروش وجو نداشته باشه)
از قفل ساده هم استفاده نکنید، چون این نوع قفل ها تمام رکوردهای جدول رو قفل میکنند، در صورتی که خیلی از عملیات ها با چند رکورد بیشتر کار ندارند و همچنین این قفل ها امکان بازگرداندن تغییرات رو ندارند، لذا باید از تراکنش ها استفاده کنید، چون هم امکان بازگرداندن تغییرات رو دارند و هم فقط رکورد رو قفل میکنند و نه همه جدول رو
یه مثال از تراکنش مورد نیاز برای این کار می زنید؟