一尘不染

我可以使用PHP检测和处理MySQL警告吗?

mysql

我正在处理将JobName列定义为UNIQUE的MySQL表。如果有人尝试使用数据库中已有的JobName将新Job保存到数据库中,则MySQL会发出警告。

我希望能够在我的PHP脚本中检测到此警告(就像错误一样)并适当地对其进行处理。理想情况下,我想知道MySQL发出了什么样的警告,以便我可以分支代码来处理它。

这可能吗?如果不是,是否是因为MySQL不具备此功能,PHP不具备此功能,还是两者兼而有之?


阅读 224

收藏
2020-05-17

共1个答案

一尘不染

若要将警告“标记”为PHP本机,将需要更改mysql /
mysqli驱动程序,这显然超出了此问题的范围。相反,您将必须基本上检查在数据库上进行的每个查询中是否存在警告:

$warningCountResult = mysql_query("SELECT @@warning_count");
if ($warningCountResult) {
    $warningCount = mysql_fetch_row($warningCountResult );
    if ($warningCount[0] > 0) {
        //Have warnings
        $warningDetailResult = mysql_query("SHOW WARNINGS");
        if ($warningDetailResult ) {
            while ($warning = mysql_fetch_assoc($warningDetailResult) {
                //Process it
            }
        }
    }//Else no warnings
}

显然,进行批量处理将非常昂贵,因此您可能需要仔细考虑警告的产生时间和方式(这可能会导致您重构以消除它们)。

作为参考,MySQL SHOW WARNINGS

当然,您可以省去对的初始查询SELECT @@warning_count,这样可以为每次执行节省一个查询,但是我将其包括在了书呆子的完整性中。

2020-05-17