gpt4 book ai didi

PHP 和 PostgreSQL 交易?

转载 作者:搜寻专家 更新时间:2023-10-30 20:00:42 27 4
gpt4 key购买 nike

很久以前我写了一个处理 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;

我已经用关系构建了我的数据库并且我正在使用(如果可能的话):

 ON DELETE CASCADE
ON UPDATE CASCADE

但我想 100% 确定数据库中的内容是干净的,并且如果/当更新/删除或插入失败时没有剩余。

如果您能分享您对 pg_prepare 的意见/经验,那就太好了,我真的需要“准备交易”和任何其他可能对我有帮助的东西吗? :)

最佳答案

不,你不需要两阶段提交!...

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

  • 在第一次查询时打开数据库连接
  • 如果使用持久连接,确保连接处于已知状态
  • 将_shutdown_function 注册到发出 ROLLBACK 的函数
  • 确保自动提交关闭,或者在第一个查询之前简单地发出 BEGIN
  • 记录数据库错误和慢速查询
  • 只使用 pg_query_params() 很好地处理 sql 注入(inject)

这样一来,如果您的脚本崩溃或其他原因,将自动发出回滚。您只能通过显式提交来提交。

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

关于PHP 和 PostgreSQL 交易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4405342/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com