Commit و Autocommit چیست؟

PHP

توسط maynoush در 5 سال پیش
0 66.9k 3 5 سال پیش
maynoush rezamax
-1

سلام تابع commit() و autocommit()  چیکار میکنن؟؟ کی مقدارشونو false , true میذاریم؟؟

2

-1 میدم بخاطر عنوان سوال این دو تابع مربوط به transaction ها میشن. از Transcation ها برای اجرای کوئریهای مرتبط به هم استفاده میشه منظور اینکه اگر یکی از کوئری ها یا خطا مواجه شدن دیگه بقیه کوئری ها نباید اجرا بشن  که اگر خطا داشت باید Roll back و اگه خطایی نداشت میشه Commit کرد. commit مقدار TRUE با FALSE نمیگیره و برای اعمال نهایی کوئری هست. وقتی Autocommit  فعال باشه (که بطور پیشفرض فعاله)  هر کوئری به ترتیب اجرا میشه اما اگر غیر فعال باشه تا زمانی که دستور commit ارسال نشه کوئری ها اعمال نمیشن.

مثال:

<?php
$mysqli = new mysqli("localhost", "root", "", "test");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$mysqli->query("
CREATE TABLE person(
	ID INT PRIMARY KEY AUTO_INCREMENT,
	name VARCHAR(25),
	lname VARCHAR(50),
	gender VARCHAR(1)
) ENGINE=InnoDB;
");

/* set autocommit to off */
$mysqli->autocommit(FALSE);

/* Insert some values */
$mysqli->query("INSERT INTO person VALUES (null,'peter', ';-peter', 'M')");
$mysqli->query("INSERT INTO person VALUES (null,'sara', 'l-sara', 'F')");

/* commit transaction */
$mysqli->commit();


/* close connection */
$mysqli->close();
?>

در کد بالا اگر $mysqli->commit(); رو غیرفعال کنی دیگه دو کوئری INSERT اعمال نمیشن.

آخرین ویرایش: 27-10-2014 ساعت 18:02، توسط REza mAX
0

مزیت استفاده از transaction ها چیه؟/ اگه واسه کوئری ها استفاده نشه به مشکل میخوریم؟

1

> مزیت استفاده از transaction ها چیه؟/ اگه واسه کوئری ها استفاده نشه به مشکل میخوریم؟

گفتم که برادر/خواهر عزیز من :)  مزیتش اینه که میتونی از اجرای کوئری هایی که به هم ربط دارن مطمئن بشی. فکر کن کوئری ۱و۲و۳ داری و کوئری ۲و۳ زمانی باید اجرا بشن که قبلش تو کوئری ۱ هیچ مشکلی نباشه. اگر در مورد مشابه بالا استفاده نکنی ممکنه مشکل پیش بیاد. بطور کلی این میشه:

try {
    // First of all, let's begin a transaction
    $db->beginTransaction();

    // A set of queries; if one fails, an exception should be thrown
    $db->query('first query');
    $db->query('second query');
    $db->query('third query');

    // If we arrive here, it means that no exception was thrown
    // i.e. no query has failed, and we can commit the transaction
    $db->commit();
} catch (Exception $e) {
    // An exception has been thrown
    // We must rollback the transaction
    $db->rollback();
}

[color=#ff6633]نکته[/color]: ()beginTransaction با ( autocommit(FALSE تفاوتی نداره هر دو یک Transcation رو شروع میکنن. فقط ()beginTransaction تو نسخه های جدید تر php اومده.

آخرین ویرایش: 27-10-2014 ساعت 22:25، توسط REza mAX

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید