<?php
try
{
$pdo = Conexao::pegarConexao();
$pdo->beginTransaction();
$query = "insert into produtos (nome, preco) values (:nome, :preco);
$smt = $pdo->prepare($query);
$smt->bindValue(":nome","caneta");
$smt->bindValue(":preco",10);
$smt->execute();
$pdo->commit();
print $pdo->lastInsertId();
} catch (Exception $e)
{
$pdo->rollBack();
echo "Erro: " . $e->getMessage();
}
Estou com uma duvida, se houvesse a necessidade de trabalhar num contexto transacional utilizando $pdo (singleton) servindo acesso a banco de dados para todas as transações em execução. Teriamos o problema de uma transação interferir na outra considerando uma unica instância do pdo ? Ou os metodos $pdo->beginTransaction() e $pdo->commit() garantem esse isolamento ? Num contexto concorrente onde varias transações (insert produtos) ocorressem ao mesmo tempo o $pdo->lastInsertId() poderia ser afetado retornando o ultimo id inserido ao invés do id gerado na transação corrente ?