【问题标题】:MySQL rollback on PHP (not MySQL) errorMySQL 回滚 PHP(不是 MySQL)错误
【发布时间】:2016-06-28 12:16:57
【问题描述】:

我已查看但无法在任何地方看到此查询。那可能是因为这是一个愚蠢的问题——我不知道我不知道什么!

我已经完成了一个封闭用户测试版,其中有许多恐怖之处和比瑞士奶酪更多的安全漏洞。这只是一个概念验证的事情,看看是否有人感兴趣。它最终将由知道自己在做什么的人正确编码。 (目前只有我看到。)

我遇到了一个新问题。一切都很顺利,但有时如果我遇到 PHP 错误,则会将错误的数据写入数据库,这会导致稍后在读取数据时出现问题。这是完全有效的数据,因此数据库不会引发错误,但我想崩溃并修复它,而在 PHP 修复之前没有任何数据留在数据库中。

我还没有使用过beginTransactioncommitrollback(我对 PDO 有点挣扎),但它似乎是解决这个问题的正确领域。

所以....

有没有办法将beginTransaction 放在一个相当繁忙的“处理”文件的开头,然后在最后做一个commit,让它在 PHP 失败时失败?

如果有解决方案,我会离开并重做文件,否则我可以使用它,对于这个非常不整洁的测试版,我将忽略 beginTransaction

感谢任何指针无法在任何地方找到此信息。我知道是否有办法做到这一点,会有很多答案,但如果是这样,我一定是使用了错误的搜索字符串。

编辑: PS 我应该说 PHP 警告和错误。我的大多数问题都与警告有关,所以当它应该是 150 时,我最终将 0 存储在数据库中,因为变量由于拼写错误而被错误命名 - 诸如此类。

【问题讨论】:

    标签: php mysql pdo transactions


    【解决方案1】:

    有没有办法将 beginTransaction 放在相当繁忙的“处理”文件的开头,然后在最后进行提交并让它在 PHP 失败时失败?

    是的。

    如果您希望您的事务因任何 PHP 错误而失败,那么只需创建一个简单的错误处理程序,例如 here,并将您的数据库内容放在开始和提交之间。

    因此 PHP 错误将成为异常,未捕获的异常是致命错误,在致命错误时 PHP 中止,在中止时 PHP 将关闭 mysql 连接,而 Mysql 在关闭时将回滚所有已执行的查询。

    【讨论】:

    • 认为我明白了。(请记住我的专业水平远低于你的水平。)如果我将 OP 编写的链接函数放在顶部文件它会将警告转换为错误,真正的错误会导致执行停止并因此导致回滚?
    • 英文链接php.net/manual/en/function.set-error-handler.php我暂时放弃了。以后可能会回来。答案中的链接指向一个似乎未解决的问题。抱歉没有看懂你的回答。希望技能水平有所提高时会回来。
    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2021-11-07
    • 2012-06-25
    • 2013-08-27
    • 2016-09-02
    相关资源
    最近更新 更多