如果 PHP 的 mysql 扩展据说不支持像 mysqli 这样的事务,为什么我看到人们使用它进行在线事务?
我正在阅读有关 mysql 事务的内容,我的印象是您必须使用 mysqli 或 PDO 才能创建事务。但是,我在堆栈交换和其他站点上看到了使用 mysql 扩展的所有示例,如下所示:
mysql_query("START TRANSACTION");
$rollback=0
if (!mysql_query($query1)){
$rollback=1
}
if (!mysql_query($query2)){
$rollback=1
}
if (!mysql_query($query3)){
$rollback=1
}
if ($rollback == 1){
mysql_query("ROLLBACK");
}
else{
mysql_query("COMMIT");
}
这样做与使用“特殊”mysqli 特定函数 mysqli::rollback 和 mysqli::commit 有什么区别?
另外,如果 php 脚本崩溃(即我的应用程序服务器崩溃等)会发生什么,数据库服务器是否会在设定的时间段后自动回滚事务?
同样,如果数据库服务器在 mysql_query("COMMIT") 之前崩溃,会发生什么?交易会被“回滚”吗?
谢谢!
I was reading about mysql transactions and I was under the impression that you had to use either mysqli or PDO in order to create transactions. However, I see all over stack exchange and other sites examples that use the mysql extension like this:
mysql_query("START TRANSACTION");
$rollback=0
if (!mysql_query($query1)){
$rollback=1
}
if (!mysql_query($query2)){
$rollback=1
}
if (!mysql_query($query3)){
$rollback=1
}
if ($rollback == 1){
mysql_query("ROLLBACK");
}
else{
mysql_query("COMMIT");
}
What is the difference between doing it this way and using the "special" mysqli specific functions mysqli::rollback and mysqli::commit?
Also, what happens if the php script crashes (IE my app server crashes etc), does the DB server automatically rollback the transaction after a set timeperiod?
Similarly, what happens if the DB server crashes before mysql_query("COMMIT")? Would the transaction be "rolled back"?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
它也是完全合法的,直接使用MySQL语句来实现事务。
坦率地说,我没有看到使用 mysqli 语法有任何改进。这是一个失败的抽象,因为它仅在 MySQL 上进行 1:1 映射。在 PDO 中使用更高级别的语法会更有意义,因为它将根据底层数据库使用不同的语法进行映射。
然而,正如 Hakre 所说:出于性能和互操作性原因,mysqli 是首选,它是 PHP 中推荐的 mysql 库。
应用程序比数据库服务器更容易崩溃。任何未提交的事务都将被回滚。
另外,事务可以回滚,因为它无法获取在一定的超时时间内锁定。
It's also perfectly legal and is using MySQL statements directly to implement transaction.
And frankly, I don't see any improvements by using the mysqli syntax. It's a failed abstraction since it maps 1:1 on MySQL only. It would make more sense to use the higher level syntax in PDO, since it will map with a different syntax according to the underlying DB.
However, as Hakre says: mysqli is preferred
for performance and interoperability reasons, it's the recommended mysql lib in PHP.
It's easier that an application program crashes rather than a DB server. Any non committed transaction will be rolled back.
Also a transaction can be rolled back because it can't acquire a lock within a certain timeout.