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

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

مثال:

کد php:
<?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
HAPPY CODING
پاسخ
#3
مزیت استفاده از transaction ها چیه؟/
اگه واسه کوئری ها استفاده نشه به مشکل میخوریم؟

پاسخ
#4
(27-10-2014 ساعت 19:51)maynoush نوشته است:  مزیت استفاده از transaction ها چیه؟/
اگه واسه کوئری ها استفاده نشه به مشکل میخوریم؟


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

کد php:
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();


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

آخرین ویرایش: 27-10-2014 ساعت 22:25، توسط REza mAX
HAPPY CODING
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note At end of session چیست؟ Babak98 1 398 12-02-2014 ساعت 12:04
آخرین ارسال: Stack OverFlow
Note تفاوت this$ با ::self در PHP چیست؟ Php1 1 718 29-09-2013 ساعت 16:01
آخرین ارسال: PHP.sec
Note PDO چیست؟ Daniel 1 1,065 11-08-2013 ساعت 16:52
آخرین ارسال: Daniel
Note PHP چیست؟ OpenSource 0 356 16-05-2013 ساعت 09:24
آخرین ارسال: OpenSource
Note PHP_SELF چیست؟ alireza 1 806 20-02-2013 ساعت 23:18
آخرین ارسال: SOFTAFZAR

کاربرانِ درحال بازدید از این موضوع:   1 مهمان