سلام
هرکاری میکنم متاسفانه 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();
خب من تازه متوجه شدم که شما دنبال این هستید که با exit شدن، دیتایی داخل جدول ثبت نشه! ولی با اینکه قبل از commit شدن exit میشه، بازهم دیتا ثبت میشه. درسته؟
چک کنید جدول اگر جدول از نوع MyISAM هست تغییرش بدید به InnoDB.
MyIsam از transaction پشتیبانی نمیکنه.
سلام.
کوئری رو به شکل زیر بنویسید. (نام جدولو داخل بک کوت بیارید):
$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();
}