Chỉ cần gọi "thực thi" sau khi bạn gọi "beginTransaction".
Nơi bạn gọi là "chuẩn bị" không thực sự quan trọng.
Đây là một ví dụ đầy đủ:
http://php.net/manual/en/pdo.begintransaction.php
VÍ DỤ:
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";
}
Tái bút:1) Tất nhiên, tôi giả định rằng $ user_input và $ user_input_2 khả dụng ngay lập tức. Bạn không muốn giao dịch của mình bị treo lâu một cách không cần thiết;)
2) Dựa trên câu trả lời bình luận của bạn ở trên, tôi nghĩ bạn có thể nhầm lẫn giữa "thực thi" và "bắt đầu tran / cam kết". Vui lòng xem liên kết của tôi.
3) Bạn thậm chí cần Một giao dịch? Bạn chỉ đang thực hiện hai "lựa chọn".
4) Cuối cùng, tại sao không làm một "tham gia" (hoặc liên hiệp, nếu tương thích) thay vì hai "lựa chọn"?