使用mysql::query()
执行UPDATE查询后,我可以检查mysqli::error
或mysqli::errno
以获得错误消息或编号。
这对记录错误很有用,但我应该根据错误的严重程度来决定该怎么做
- 如果是逻辑错误(行不存在,值无效),我应该中止执行
-
如果数据库不可访问,或者类似的情况,我应该只记录错误,但不停止程序执行。
- 我可以检查错误编号,例如,当列未知时返回错误1054。问题是mysql手动列出了近1000个错误,所以检查哪些错误是相关的似乎没有办法,如果我只错过了一个与问题相关的错误条件,可能会非常危险
- 另一个问题是当该行不在表中时,因为没有返回错误
检查这种情况的常用方法是什么?
您首先概述自己的期望,然后询问常见的情况。我想说的是,如果数据库层无法连接到数据库,就会抛出数据库异常。因此,很明显,在某种系统级别上,有些东西失败了。
为与数据库交互而编写的应用程序应该自行决定如何处理这些数据库异常。通常,如果没有数据库,那么期望数据库工作的代码就不能工作。
现在来看一下您称之为逻辑错误的情况。这在很大程度上取决于情况。我不会把注意力集中在特定的数据库错误代码上(甚至可能会随着时间的推移而改变,新的错误代码会随着新版本而添加,旧的错误代码可能不再使用)。相反,集中注意某个操作的返回数据是否符合您的期望,并提供这样的值,以防您目前还没有这样做。
例如:如果更新至关重要,并且您需要验证更新是否成功,那么请检查。但决定它是否至关重要并不是数据库层的一部分。这是应用程序代码的一部分,例如域模型或事务脚本。
在某些情况下,Mysqli本身已经可以抛出一些异常,扩展中有一个异常:
class mysqli_sql_exception extends RuntimeException
对于连接错误,您需要抛出自己的异常。因此,检查返回值,然后抛出数据库异常。