MySQL 回滚 PHP(不是 MySQL)错误

MySQL rollback on PHP (not MySQL) error

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

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

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

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

所以....

有没有办法将 beginTransaction 放在相当繁忙的 "processing" 文件的开头,然后在末尾执行 commit 并让它在 PHP失败?

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

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

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

Is there a way of putting a beginTransaction at the start of a fairly busy "processing" file and then do a commit at the end and have it fail on a PHP fail?

是的。

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

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