تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ علیرضا دهکار
اجرا نشدن transaction
محسن موحد حل شده توسط محسن موحد

سلام

هرکاری میکنم متاسفانه 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();

 

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

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

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

لقمان آوند ۱۸ فروردین ۱۳۹۹، ۰۳:۵۱

سلام.

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

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

 

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

محسن موحد ۱۸ فروردین ۱۳۹۹، ۰۷:۳۵
# 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();
}

 

علیرضا دهکار ۱۸ فروردین ۱۳۹۹، ۰۸:۰۵

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

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

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

بهترین پاسخ
محسن موحد ۱۸ فروردین ۱۳۹۹، ۰۸:۴۵