Просто извикайте „изпълни“, след като извикате „beginTransaction“.
Къде наричате „подгответе“ всъщност няма значение.
Ето пълен пример:
http://php.net/manual/en/pdo.begintransaction.php
ПРИМЕР:
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) Предполагам, разбира се, че $user_input и $user_input_2 са налични веднага. Не искате вашата транзакция да виси отворена ненужно дълго;)
2) Въз основа на вашия отговор на коментар по-горе, мисля, че може да обърквате „изпълнение“ и „започване на преобразуване/комитиране“. Моля, вижте връзката ми.
3) Имате ли дори нужда сделка? Вие просто правите две „избори“.
4) И накрая, защо не направите едно „присъединяване“ (или обединение, ако е съвместимо) вместо две „избори“?