首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >相当于mysql_query的mysqli (“BEGIN”)

问相当于mysql_query的mysqli (“BEGIN”)
EN

Stack Overflow用户
提问于 2016-09-12 21:57:18
回答 2查看 444关注 0票数 0

我正在将我们的代码库从PHP5.4升级到PHP7。在我们的测试中,我们使用命令将整个测试包装在一个事务中。

Mysql_query(“开始”);

那就做一大堆事情

Mysql_query(“回滚”);

然后,这两个命令之间的所有内容都被当作事务处理,并且可以在测试结束时回滚。我还无法用mysqli在PHP7中实现这个功能。我尝试使用mysqli_autocommit函数,但是这不允许测试中的不同查询访问测试早期创建的数据。似乎每个插入都在自己的事务中。

更新:

问题是,每次我为一个表创建一个新适配器时,我似乎都要创建一个到db的新连接。使用PHP5和上面的‘mysql_query(“BEGIN”)命令,每个连接都包含在该事务中,所有语句都可以回滚。我还没有找到用php7做这件事的方法。如果我使用

代码语言:javascript
复制
$mysqli->begin_transaction();

那么,只有单个连接是事务的一部分。为了实现我想要的功能,我必须隐式地强制每个适配器使用现有的连接,而不是创建它们自己的连接。我想可能有一种方式可以让PHP7自动为您完成此操作?从现在起,我唯一能搞清楚的方法就是设置一个全局的,如果它存在的话,使用连接而不是创建新的连接。所以我的问题仍然存在,是否有办法强迫打开的所有连接都包含在一个可以回滚的事务中,还有一个问题是,重用连接的最佳实践是什么,因为我确信设置全局是错误的。

我使用的是MySQL 5.5.52。PHP 7.0.10

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-13 14:43:54

我想可能有一种方式可以让PHP7自动为您完成此操作?

不是的。

我唯一能弄明白的方法就是设置一个全局的

不完全是。

您可以使用OOP,并为可能需要OOP的所有类提供一个SQL适配器实例。但是,如果您的代码是过程性的,则可以使用全局变量或单例帮助类。

票数 3
EN

Stack Overflow用户

发布于 2016-09-13 02:39:52

事务是你要找的东西。它的使用方式如下:

代码语言:javascript
复制
$mysqli->begin_transaction();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39459399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档