加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php – 当用户中止连接时回滚事务

发布时间:2020-05-25 09:05:04 所属栏目:PHP 来源:互联网
导读:首先,对不起我的英语,我在谷歌翻译的帮助下写了这篇文章. 我正在尝试使用PHP和Ajax创建像Google Wave这样的应用程序.我有一个textarea,当用户输入内容时,使用oninput检测页面上的javascript并将textarea的内容发送到服务器,服务器将内容存储到数据库中. 我正

首先,对不起我的英语,我在谷歌翻译的帮助下写了这篇文章.

我正在尝试使用PHP和Ajax创建像Google Wave这样的应用程序.我有一个textarea,当用户输入内容时,使用oninput检测页面上的javascript并将textarea的内容发送到服务器,服务器将内容存储到数据库中.

我正在做的是,每当我通过XHR发送内容时,XHR.abort()总是会中断先前的XHR请求.数据库中的数据很好,但有时它存储在以前的版本中.

我知道这是因为PHP没有停止执行,即使客户端已经中止,有时前一个请求花费了更多时间,最后一个请求并在最后一个请求之后完成,所以我读了“ignore_user_abort”函数的手册和“connection_aborted”,但问题仍然存在.

我创建了这个脚本来模拟情况,我希望当我中止连接时(按“停止”,关闭选项卡/窗口),数据库上没有任何新数据,但是5秒后,我仍然有新数据,所以当用户中止连接时,我需要帮助来回滚事务.

这是要模拟的脚本(定义了PDO_DSN,PDO_USER,PDO_PASS):

<?php
ignore_user_abort(true);

ob_start('ob_gzhandler');

$PDO = new PDO(PDO_DSN,PDO_PASS,array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));

$PDO->beginTransaction();
$query = $PDO->query('INSERT INTO `table` (`content`) VALUES (' . $PDO->quote('test') . ')');
sleep(5);
echo ' ';
ob_flush();
flush();
if (connection_aborted()) {
  $PDO->rollBack();
  exit;
}
$PDO->commit();

ob_end_flush();
如何让浏览器发回您也存储在数据库中的时间戳或运行号码.并且您的更新可以检查,以便它只在新时间戳更新时写入.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读