我正在处理将JobName列定义为UNIQUE的MySQL表。如果有人尝试使用数据库中已有的JobName将新Job保存到数据库中,则MySQL会发出警告。
我希望能够在我的PHP脚本中检测到此警告(就像错误一样)并适当地对其进行处理。理想情况下,我想知道MySQL发出了什么样的警告,以便我可以分支代码来处理它。
这可能吗?如果不是,是否是因为MySQL不具备此功能,PHP不具备此功能,还是两者兼而有之?
若要将警告“标记”为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,这样可以为每次执行节省一个查询,但是我将其包括在了书呆子的完整性中。
SELECT @@warning_count