我试图了解过程式PHP风格的预准备语句中的错误处理应如何工作。
根据文档,mysqli_prepare
和mysqli_stmt_execute
在失败时输出布尔值FALSE
。太好了,因此,如果我运行以下代码,我应该能够知道什么时候不起作用:
if ($my_query= mysqli_prepare($my_conn, "SELECT * FROM my_table")){
if (mysqli_stmt_execute($my_query)){
// DO WHATEVER I NEED TO DO
} else {
// HANDLE ERROR
}
} else {
// HANDLE ERROR
}
问题在于mysqli_prepare
和mysqli_stmt_execute
并非总是在失败时输出False
,它们会引发异常。例如,如果我的SQL语法不正确(请参见下面的示例),我将得到一个mysqli_sql_exception
。
if ($my_query= mysqli_prepare($my_conn, "SELECTTTT * FROM my_table")){
if (mysqli_stmt_execute($my_query)){
// DO WHATEVER I NEED TO DO
} else {
// HANDLE ERROR
}
} else {
// HANDLE ERROR
}
这需要try-catch语句,但是……if
甚至是必要的吗?
我的问题是:什么被认为是执行失败? (没有异常,但是那些方法返回False值)如果我使用if
块,是否真的需要使用try-catch
语句?因为我认为try-catch
块就足够了,但是PHP文档示例(例如mysqli_stmt_fetch示例)仅使用if
s子句来处理错误。
我想听听您如何处理这种情况下的失败。此外,如果您知道有关此问题的任何优秀教程,请发送链接给我,我们将不胜感激。我看过的大多数教程都不关心错误处理。
答案:
如果运行我提供的代码,则可能无法重现我的错误。问题是,连接到数据库后,我有以下代码行:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
这使我的警告变成错误,这将引发异常。没有它,if
语句确实有意义。答案在这篇文章的评论中。