Я использую этот код для вставки данных в 2 таблицы,
try {
array(PDO::ATTR_PERSISTENT => true);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
// 1st insert
$db->exec("insert into users (id, username, password,permission) values (18, 'raman', 2002,3)");
//2nd insert
$db->exec("insert into table_11 (id,user_id1,amount) values (14, '130', '11300')");
$db->commit();
} catch (Exception $e) {
$db->rollBack();
echo "Failed : " . $e->getMessage();
}
Этот код работает нормально, однако, когда я тестирую транзакцию, делая вторую ошибку вставки, поскольку я изменил имя таблицы на неправильное имя таблицы, я обнаружил, что первая вставка все еще работает и может добавлять новые данные, даже вторая вставка не работает, У меня вопрос, почему сработала 1-я вставка? Я использую MySQL.
Какой механизм хранения вы используете? Некоторые (например, MyISAM) не поддерживают транзакции, поэтому первая вставка произойдет независимо от того, что произойдет со второй.
Эта строка array(PDO::ATTR_PERSISTENT => true);
не выполняет никаких действий. Если вы намереваетесь установить постоянные соединения, этот массив следует передать в качестве аргумента опций в new PDO()
.
я использую MySQL, этот код использует PHP
Они не говорят о том, какой тип базы данных вы используете, они спрашивают о механизме хранения, см. Здесь stackoverflow.com/questions/4233816/…
Я обнаружил, почему этот код не работает должным образом, я должен использовать InnoDB при создании таблиц, поэтому я удалил текущие таблицы и создал новую с помощью механизма хранения InnoDB, теперь он работает нормально.
Какую базу данных вы используете?