Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 跨多个脚本保持PDO提交或回滚活动_Php_Mysql_Pdo_Commit_Rollback - Fatal编程技术网

Php 跨多个脚本保持PDO提交或回滚活动

Php 跨多个脚本保持PDO提交或回滚活动,php,mysql,pdo,commit,rollback,Php,Mysql,Pdo,Commit,Rollback,解释我的问题最好的方法是举个例子 假设我有3个脚本 第一个是一个表单,提交后它将转到第二个脚本,该脚本处理POST变量并将它们插入数据库 在这个页面/脚本上有另一个submit按钮,它将带您进入第三个页面,插入查询最终提交到DB 这可能吗 或者提交/回滚必须在同一个脚本上 谢谢是的,提交/回滚必须在启动事务的同一请求中 另一种看法是,事务必须在同一个数据库连接中解析,而数据库连接(与任何其他资源一样)不能跨多个PHP请求生存 作为@Wrikken注释,您可以将未提交的数据保存在会话数据或其他一些

解释我的问题最好的方法是举个例子

假设我有3个脚本

第一个是一个表单,提交后它将转到第二个脚本,该脚本处理POST变量并将它们插入数据库 在这个页面/脚本上有另一个submit按钮,它将带您进入第三个页面,插入查询最终提交到DB

这可能吗

或者提交/回滚必须在同一个脚本上


谢谢

是的,提交/回滚必须在启动事务的同一请求中

另一种看法是,事务必须在同一个数据库连接中解析,而数据库连接(与任何其他资源一样)不能跨多个PHP请求生存

作为@Wrikken注释,您可以将未提交的数据保存在会话数据或其他一些非数据库存储空间(例如memcached)中

另一个选项是在每次请求期间在数据库中保存和提交数据,但在表中添加一列以显示数据状态。因此,它将针对数据库事务进行物理提交,但在处理完第三个脚本之前,它将被注释为不完整


我已经实现了这样的系统,例如“购物车”样式的信息。它还有助于每天运行cron作业来删除旧的、未完成的数据。因为不可避免的是,人们有时确实会放弃正在进行的工作,而永远无法完成这一步

不是在几个脚本中(或者实际上,这将是一个非常难以设置和维护的问题,但如果您调用一个保持连接的有状态应用程序,这并非不可能)。但简单是最好的:不要在第一个和第二个脚本中对数据库执行任何操作。如果只想在第三个脚本中提交,请将数据存储在会话中:将数据存储在会话或类似的会话中,并在第三个脚本中运行所有查询。酷。谢谢我想可能是这样。是的,将放入DB中,并为事务状态添加一列。谢谢