Я пытался заставить транзакции работать на моем локальном сервере WAMP с MySQL и структурой БД InnoDB, но всякий раз, когда я commit
транзакции, все запросы выполняются дважды.
Я создал довольно простой скрипт для вставки двух пользователей:
$db = new \PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
try {
$stmt = $db->prepare("INSERT INTO users (username, email, created_at) VALUES ('user1', 'user1@mail.com', 0)");
$stmt->execute();
$stmt = $db->prepare("INSERT INTO users (username, email, created_at) VALUES ('user2', 'user2@mail.com', 1)");
$stmt->execute();
$db->commit();
echo 'Success';
} catch (\Exception $e) {
$db->rollBack();
echo "An error occurred {$e->getMessage()}";
}
Ожидается, что при отсутствии ошибок будут созданы два пользователя. Вместо вставлено четыре пользователей.
Я пытался SET autocommit=0;
до начала транзакции, но это не имело значения.
ОБНОВЛЕНО
Пользователь Уилл предложил посмотреть журналы доступа, и было решение. Google Chrome ВСЕГДА пытается получить favicon.ico (даже если он не указан) из-за того, что apache2 перенаправляет все запросы (кроме существующих файлов) на index.php
, текущий запрос также ВСЕГДА выполняется снова.