if(mysql_query('BEGIN;')){
$status=1;
if(!mysql_query('query1'))
$status=0;
if(!mysql_query('query2'))
$status=0;
if(!mysql_query('query3'))
$status=0;
if(!mysql_query('query4'))
$status=0;
if($status)
mysql_query('commit;');
}
یکی از راه های که موجوده اینه
ابتدا نوع جداول رو innodb کنید
PHP:if(mysql_query('begin;')){ $status=1; if(!mysql_query('query1')) $status=0; if(!mysql_query('query2')) $status=0; if(!mysql_query('query3')) $status=0; if(!mysql_query('query4')) $status=0; if($status) mysql_query('commit;'); }
چندین راه دیگه هم هست یادم باشه یه مقاله بنویسم !
باید تراکنش تعریف کنید ! مثل سیستم های بانکی که مثلا وقتی شما کارت به کارت میکنی از حساب یه نفر کم میشه و به حساب یکی دیگه اضافه میشه حالا اگر که این وسط یکیش اجرا بشه و دومی به هر دلیلی اجرا نشه مبلغ کسر شده از کارت برگشت داده میشود !
موفق باشید
PHP:if(mysql_query('begin;')){ $status=1; if(!mysql_query('update .....')) $status=0; if(!mysql_query('update.....')) $status=0; if($status) mysql_query('commit;'); }
با سلام..
یک راه خیلی راحت هم استفاده از ';' است..البته مثل روش های دوستان اینطوری نیست که اگه یکیش اجرا نشد اون یکی هم اجرا نشه..به هر حال اینم یک روشه..بستگی به کاربردتون داره..
با سلام، درسته كه MySQL به محض شروع اجراي يك Query روي جدول قفل ميگذاره و بقيه Queryها رو تا وقتي كه Query جاري تمام نشده، توي صف نگه ميداره ولي يك راه براي كار شما وجود داره و اون هم استفاده از Trigger هست. البته در Trigger هم Queryها به ترتيب اجرا ميشن ولي مزيتي كه داره اينه كه به محض برقرار شدن شرط (مثلاً اضافه شدن يك ركورد به يك جدول خاص)، Query مشخصي رو اجرا ميكنه و نياز نيست خودتون اين كار رو انجام بدين و اين كار توسط MySQL انجام ميشه و تقريباً ميشه گفت همزمان عمل ميكنه، چون كد بررسي شرط و اجراي دستورات روي يك كامپيوتر هست (سرور) و درنتيجه فقط با CPU و RAM كار ميكنه و تقريباً آني انجام ميده.
موفق و مؤيد باشيد.