Anrop bara "execute" efter att du anropat "beginTransaction".
Var du kallar "förbered" spelar egentligen ingen roll.
Här är ett komplett exempel:
http://php.net/manual/en/pdo.begintransaction.php
EXEMPEL:
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) Jag antar naturligtvis att $user_input och $user_input_2 är tillgängliga omedelbart. Du vill inte att din transaktion ska vara öppen onödigt länge;)
2) Baserat på ditt kommentarsvar ovan tror jag att du kan blanda ihop "exekvera" och "börja överföra/besluta". Titta gärna på min länk.
3) Har du ens behöver en transaktion? Du gör bara två "selects".
4) Slutligen, varför inte göra en "join" (eller fackförening, om den är kompatibel) istället för två "utvalda"?