Chiama semplicemente "execute" dopo aver chiamato "beginTransaction".
Non importa dove chiami "preparare".
Ecco un esempio completo:
http://php.net/manual/en/pdo.begintransaction.php
ESEMPIO:
try {
$cnx = new PDO($dsn,$dbuser,$dbpass);
$cnx->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$cnx->beginTransaction();
$stmt=$cxn->prepare("SELECT * FROM users WHERE username=?");
$stmt->execute(array($user_input));
$stmt_2=$cxn->prepare("SELECT * FROM othertable WHERE some_column=?");
$stmt_2->execute(array($user_input_2));
$cnx->commit();
}
catch (Exception $e){
$cxn->rollback();
echo "an error has occurred";
}
PS:1) Presumo, ovviamente, che $user_input e $user_input_2 siano immediatamente disponibili. Non vuoi che la tua transazione rimanga aperta inutilmente a lungo;)
2) Sulla base della tua risposta al commento sopra, penso che potresti confondere "esegui" e "inizia tran/commetti". Si prega di guardare il mio link.
3) Ne hai ancora necessità una transazione? Stai solo facendo due "seleziona".
4) Infine, perché non fare un "join" (o union, se compatibile) invece di due "select"?