用PHP进行防错的准备好的语句

时间:2018-10-14 12:03:43

标签: php error-handling exception-handling prepared-statement

我试图了解过程式PHP风格的预准备语句中的错误处理应如何工作。

根据文档,mysqli_preparemysqli_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_preparemysqli_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语句确实有意义。答案在这篇文章的评论中。

0 个答案:

没有答案