我正在将我们的代码库从PHP5.4升级到PHP7。在我们的测试中,我们使用命令将整个测试包装在一个事务中。
Mysql_query(“开始”);
那就做一大堆事情
Mysql_query(“回滚”);
然后,这两个命令之间的所有内容都被当作事务处理,并且可以在测试结束时回滚。我还无法用mysqli在PHP7中实现这个功能。我尝试使用mysqli_autocommit函数,但是这不允许测试中的不同查询访问测试早期创建的数据。似乎每个插入都在自己的事务中。
更新:
问题是,每次我为一个表创建一个新适配器时,我似乎都要创建一个到db的新连接。使用PHP5和上面的‘mysql_query(“BEGIN”)命令,每个连接都包含在该事务中,所有语句都可以回滚。我还没有找到用php7做这件事的方法。如果我使用
$mysqli->begin_transaction();那么,只有单个连接是事务的一部分。为了实现我想要的功能,我必须隐式地强制每个适配器使用现有的连接,而不是创建它们自己的连接。我想可能有一种方式可以让PHP7自动为您完成此操作?从现在起,我唯一能搞清楚的方法就是设置一个全局的,如果它存在的话,使用连接而不是创建新的连接。所以我的问题仍然存在,是否有办法强迫打开的所有连接都包含在一个可以回滚的事务中,还有一个问题是,重用连接的最佳实践是什么,因为我确信设置全局是错误的。
我使用的是MySQL 5.5.52。PHP 7.0.10
发布于 2016-09-13 14:43:54
我想可能有一种方式可以让PHP7自动为您完成此操作?
不是的。
我唯一能弄明白的方法就是设置一个全局的
不完全是。
您可以使用OOP,并为可能需要OOP的所有类提供一个SQL适配器实例。但是,如果您的代码是过程性的,则可以使用全局变量或单例帮助类。
发布于 2016-09-13 02:39:52
事务是你要找的东西。它的使用方式如下:
$mysqli->begin_transaction();https://stackoverflow.com/questions/39459399
复制相似问题