Php 事务提交时InnoDB重复插入

Php 事务提交时InnoDB重复插入,php,mysql,sql,innodb,Php,Mysql,Sql,Innodb,我一直试图让事务在运行MySQL和DB structure InnoDB的本地WAMP服务器上运行,但每当我提交事务时,所有查询都会执行两次 我创建了一个相当简单的脚本来插入两个用户: $db = new \PDO($dsn, $username, $password); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $db->beginTransaction(); try { $stmt =

我一直试图让事务在运行MySQL和DB structure InnoDB的本地WAMP服务器上运行,但每当我提交事务时,所有查询都会执行两次

我创建了一个相当简单的脚本来插入两个用户:

$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()}";
}
预计如果没有错误,将创建两个用户。而不是插入四个用户

我尝试了
设置autocommit=0在启动事务之前,但这没有任何区别

更新


用户将建议查看访问日志,并找到解决方案。Google Chrome总是试图获取favicon.ico(即使没有指定),因为apache2将所有请求(存在的文件除外)重定向到
index.php
,当前请求也总是再次执行;内部try语句

$db = new \PDO($dsn, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);



try {
$db->beginTransaction();

    $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()}";
}

很抱歉提出这些问题,但我们需要确定:在测试之前,数据库是否为空?您的脚本只运行了一次吗?是的,在运行脚本之前,我删除了所有(除了第一个)用户以获得干净的测试结果。演示如何调用它(网页上某个位置的某些JS,在cli中,在shell脚本中???)此外,您是否可以将查询更改为在“创建的时间”列中插入时间()?这可能会有帮助。。也许可以查看一下您的访问日志(如果使用apache)并确保只调用一次脚本?User@Will让我走上了正确的道路,显然Chrome总是会得到favicon.ico,即使它不特定-apache2重定向请求(存在的文件除外)指向index.php意味着如果没有favicon,/favicon.ico路由总是重定向到index.php。