LastInsertId PDO dla MySQL warunek wyścigu?

Piszę plik klasy PHP, który przesyła dane do bazy danych MySQL przy użyciu PDO. Zasadniczo plik jest trafiany wiele razy bardzo szybko (za każdym razem tworzy nową instancję klasy), a metoda lastInsertId () nie nadąża. Na przykład:

//sleep(rand(100,1000)/100);
$sql = "INSERT INTO `testing` (`name`, `timestamp`) VALUES (?, ?)";
$this->dbh->beginTransaction();
$sth = $this->dbh->prepare($sql);
$sth->bindValue(1, $_POST["name"]);
$sth->bindValue(2, microtime());
$sth->execute();
$this->id = $this->dbh->lastInsertId();
$this->dbh->commit();

Jeśli strona jest wywoływana dwa razy bardzo szybko, kiedy$this->id jest zwracane obie instancje mają wartość 2, mimo że DB wygląda tak:

+----+--------+-----------------------+
| id | name   | timestamp             |
+----+--------+-----------------------+
|  1 | Mark   | 0.98705900 1385770566 |
|  2 | George | 0.99367300 1385770566 |
+----+--------+-----------------------+

Problem polega na tym, że pierwsze wykonane zapytanie powinno miećid wartość 1, a drugie wykonane zapytanie powinno miećid wartość 2. Aby obejść ten problem, dodałem losowy sen (opisany powyżej) i poprawiono problem. Korzystam z transakcji, które moim zdaniem naprawią ten problem. Czy brakuje mi tutaj czegoś oczywistego?

Dla tych, którzy są ciekawi, oto moja konfiguracja stołu:

CREATE TABLE `testing` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `name` varchar(255) NOT NULL,
    `timestamp` varchar(255) NOT NULL,
     PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8

PHP 5.3.3
MySQL 5.1.69

questionAnswers(2)

yourAnswerToTheQuestion