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