اجرا نشدن transaction

پرسیده شده
فعالیت 1487 روز پیش
دیده شده 1279 بار
0

سلام

هرکاری میکنم متاسفانه transaction اجرا نمیشه و حتی با بستن پروژه قبل از کامیت بازهم اطلاعات ثبت میشه و حتی خطایی هم نیست

سرچ کردم در این مورد تست متاسفانه به نتیجه درستی نرسیدم

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

$posts = [
    ['post 1', 'content post 1', 'publish'],
    ['post 2', 'content post 2', 'trash'],
    ['post 3', 'content post 3', 'draft'],
];

$sql = "INSERT INTO php_expert (`title`,`content`,`status`) VALUES (?,?,?)";

$stmt = $pdo->prepare($sql);

$pdo->beginTransaction();

foreach ($posts as $post) {
    $stmt->execute($post);
}

exit();

$pdo->commit();

 

فایل پیوست

علیرضا دهکار
علیرضا دهکار

18 فروردین 99

6

مورد تایید استاد

حذف شده

خب من تازه متوجه شدم که شما دنبال این هستید که با exit شدن، دیتایی داخل جدول ثبت نشه! ولی با اینکه قبل از commit شدن exit میشه، بازهم دیتا ثبت میشه. درسته؟

چک کنید جدول اگر جدول از نوع MyISAM هست تغییرش بدید به InnoDB.

MyIsam از transaction پشتیبانی نمیکنه.

فایل پیوست

محسن موحد

توسط

محسن موحد

18 فروردین 99

حذف شده
بله دیتا در هر صورت ثبت میشه ممنون از راهنماییتون، بالاخره منو به جواب صحیح رسوندین درسته MYISAM پشتیبانی نمیکنه از transaction سپاس فراوان موفق باشید
علیرضا دهکار

18 فروردین 99

حذف شده
ممنون محسن جان، نکته مهمی رو گفتی. فکر می کنم در مورد تفاوت های این دو انجین صحبت نکردم توی جلسات!
لقمان آوند

18 فروردین 99

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

19 فروردین 99

2
حذف شده

کدت که مشکلی نداره.

کانفیگ های PDO رو باید چک کنی احتمالا.

این تاپیک رو ببین حتما.

فایل پیوست

لقمان آوند

توسط

لقمان آوند

18 فروردین 99

حذف شده
ن متاسفانه مشکل برطرف نشد، تاپیک های مختلف استک اورفلو رو بررسی کردم
علیرضا دهکار

18 فروردین 99

0
حذف شده

سلام.

کوئری رو به شکل زیر بنویسید. (نام جدولو داخل بک کوت بیارید):

$sql = "INSERT INTO `php_expert` (`title`,`content`,`status`) VALUES (?,?,?)";

 

بعد از foreach دستور exit رو هم پاک کنید تا commit انجام بشه.

فایل پیوست

محسن موحد

توسط

محسن موحد

18 فروردین 99

حذف شده
ممنون بابت راهنماییتون اما هرکاری میشد انجام دادم الان دوباره دارم ی سری کار انجام میدم اما هیچکدوم عملکرد درستی نداره میخوام تست کنم که اگر transaction به پایان نرسه آیا اطلاعات ثبت میشه یا ن که جواب باید ن باشه اما در هر صورت اطلاعات بصورت کامل ثبت میشه exit رو برای این گذاشتم که transaction کامیت نشه
علیرضا دهکار

18 فروردین 99

حذف شده
کدتون کامل بذارید بهمراه ساخت آبجکت
محسن موحد

18 فروردین 99

0
حذف شده
# PDO CONNECTION

list($host, $dbname, $user, $pass) = ['localhost', 'wpmain', 'root', ''];
try {
    $pdo = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8mb4", $user, $pass, array(PDO::ATTR_PERSISTENT => true));
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo "Error message: " . $e->getMessage();
}


# Insert Data in DB

$posts = [
    ['post 1', 'content post 1', 'publish'],
    ['post 2', 'content post 2', 'trash'],
    ['post 3', 'content post 3', 'draft'],
];

try {
    $pdo->beginTransaction();

    $sql = "INSERT INTO `php_expert` (`title`,`content`,`status`) VALUES (?,?,?);";

    $stmt = $pdo->prepare($sql);

    foreach ($posts as $post) {
        $stmt->execute($post);
    }

    exit();

    $pdo->commit();
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

 

فایل پیوست

علیرضا دهکار

توسط

علیرضا دهکار

18 فروردین 99