PHP和PostgreSQL事务?

PHP和PostgreSQL事务?,php,sql,database,postgresql,Php,Sql,Database,Postgresql,很久以前,我编写了一个处理postgresql数据库连接的php类。 我已经将事务添加到我的插入/更新函数中,它对我来说很好。但最近我发现了“pg_prepare”功能 我对该函数的功能以及切换到它是否更好有些困惑 当前,每当我执行插入/更新时,我的sql如下所示: $transactionSql = "PREPARE TRANSACTION ".md5(time()).";" .$theUpdateOrDeleteSQL.";".

很久以前,我编写了一个处理postgresql数据库连接的php类。
我已经将事务添加到我的插入/更新函数中,它对我来说很好。但最近我发现了“pg_prepare”功能
我对该函数的功能以及切换到它是否更好有些困惑

当前,每当我执行插入/更新时,我的sql如下所示:

$transactionSql = "PREPARE TRANSACTION ".md5(time()).";"
                  .$theUpdateOrDeleteSQL.";".
                  ."COMMIT;";

This will return something like:
PREPARE TRANSACTION '4601a2e4b4aa2632167d3cc62b516e6d';
INSERT INTO users (username,g_id,email,password)
            VALUES('test',  '1', 'test','1234');
COMMIT;
我已经用关系构建了我的数据库,我正在使用(如果可能):

但我想100%确保数据库中的内容是干净的,并且如果更新/删除或插入时出现故障,则不会有剩余内容


如果您能分享您对pg_prepare的看法/经验,那就太好了。我真的需要“prepare transaction”和其他可能对我有帮助的东西吗?:)

不,您不需要准备事务(这是为跨不同服务器的分布式事务而设计的,正如米伦已经指出的那样)

我不确定PHP接口是如何处理的,但只要您能够确保您没有在自动提交模式下运行,事情就应该会好起来


如果无法控制自动提交模式,只需将语句放入…提交块

不,不需要两阶段提交

为了安全地处理PHP数据库,请不要直接使用pg_查询,而是将其包装在一个特殊函数中,该函数执行以下操作:

  • 在第一次查询时打开数据库连接
  • 如果使用持久连接,请确保连接处于已知状态
  • 将_shutdown _函数注册到发出回滚的函数
  • 确保“自动提交”处于禁用状态,或者在第一次查询之前发出“开始”命令
  • 日志数据库错误和查询速度慢
  • 只使用pg_query_params(),它很好地处理sql注入
这样,如果您的脚本崩溃或其他情况,将自动发出回滚。您只能通过显式提交来提交


如果您使用持久连接,请注意:php对pg_pconnect的处理有点……错误。

您究竟为什么使用“准备事务”?您读过它吗?特别是关于“准备事务不用于应用程序或交互式会话…”的部分是的……几年前我写《司机》时有点错过了……谢谢你的帮助:)谢谢你的帮助!:)对于那些需要更多信息的人->你介意发布一个指向github的链接或显示此功能的要点吗?还是推荐信?将非常有用,提前感谢:)
 ON DELETE CASCADE
 ON UPDATE CASCADE