【问题标题】:Codeigniter $this->db->trans_begin(); if not committed or rolled back and page is refreshed it locks the dbCodeigniter $this->db->trans_begin();如果未提交或回滚并且页面被刷新,它将锁定数据库
【发布时间】:2012-03-17 03:15:51
【问题描述】:

我有一个页面,其中使用了$this->db->trans_begin(); 并完成了一些插入。然后一个模式打开并要求用户确认,如果用户确认,则提交事务,否则滚动。但是,如果模式在提交或回滚发生之前打开,我会刷新他的浏览器。在关注相同的事情 3 到 4 次时,浏览器会因为表被锁定而挂起......

有人知道如果事务在codeigniter 中打开并且页面被刷新,我可以在开始新事务之前关闭它吗?

【问题讨论】:

  • 如何在 PHP 中获得用户对开放事务的响应?如果您的脚本执行结束,您打开的 mysql 连接应该关闭,打开的事务应该自动为您中止。你为你的表使用什么表引擎。典型的是 MyISAM 和 InnoDB。您使用哪种连接类型,持久/非持久?我的第一个猜测是您正在使用持久连接。使用非持久性的,或者只是在脚本结束之前中止待处理的事务。
  • 参见codeigniter.com/user_guide/database/configuration.htmlpconnect 的配置值更改为FALSE

标签: php mysql codeigniter transactions


【解决方案1】:

是的,这就是交易的本意。您必须关闭或回滚。

交易应尽可能短地保持开放,因为它们可能会阻止其他活动。您当然不应该在等待用户反馈时保持交易处于打开状态。

询问用户是否确定,然后只有当他们按下“确定”时才开始事务,完成工作并提交。

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 2011-02-22
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多