繁体   English   中英

PDO事务和函数调用

[英]PDO Transactions & function calls

函数调用可以在PDO事务块中发生吗? 这是简化的代码(使用MySql数据库)......

try{  
  $db->beginTransaction();  

  // call to function that creates user
  $user_id = create_user();  

  // call to function that creates company      
  $company_id = create_company();

  // call to function to link user & company
  add_user_to_company($user_id, $company_id);

  $db->commit();  
}

如果使用交易无法做到这一点,推荐的策略是什么?

除非这些函数调用中的任何一个尝试自己打开或提交事务,或者使用与$db存储的连接不同的连接,否则它应该可以正常工作。 PDO对象(或者RDBMS)不知道或不关心您是否在调用PHP中的其他函数。 所有它知道的是,该动作是否发生在与$db打开的连接相同的开放连接上。 我们假设这些函数要么接收$db作为参数,要么全局访问它。

请记住,虽然PDO跟踪事务状态(通过PDO::inTransaction()公开),但它实际上是管理事务状态的RDBMS,而不是PDO或PHP应用程序代码。 如果函数尝试在前一个事务提交之前打开一个新事务,则MySQL记录的行为是自动提交先前的事务,因为它不支持事务嵌套。

因此,请确保您的其他函数调用不会尝试更改事务状态。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM