Вот мой сценарий:
$id = $_GET['id']; $value = $_GET['val']; // database connection here try{ $db_conn->beginTransaction(); // inserting $stm1 = $db_conn->prepare("INSERT into table1 (col) VALUES (?)"); $stm1->execute(array($value)); // updating $stm2 = $db_conn->prepare("UPDATE table2 SET col = "a new row inserted" WHERE id = ?"); $stm2->execute(array($id)); $db_conn->commit(); } catch(PDOException $e){ $db_conn->rollBack(); }
Все, что я хочу знать, могу ли я использовать оператор if
в кодах, которые находятся между beginTransaction()
и commit()
? Что-то вроде этого:
$id = $_GET['id']; $value = $_GET['val']; // database connection here try{ $db_conn->beginTransaction(); // inserting $stm1 = $db_conn->prepare("INSERT into table1 (col) VALUES (?)"); $stm1->execute(array($value)); // updating if (/* a condition here */){ $stm2 = $db_conn->prepare("UPDATE table2 SET col = "a new row inserted" WHERE id = ?"); $stm2->execute(array($id)); } $db_conn->commit(); } catch(PDOException $e){ $db_conn->rollBack(); }
Могу я ?
На самом деле я спросил об этом, потому что вот предложение, в котором говорится, что вы не можете этого сделать, и это опасно:
Не работает и опасен, так как вы можете закрыть транзакцию слишком рано с помощью вложенного commit ().