PHP MySQLi 函数

PHP mysqli_driver::$report_mode / mysqli_report() 函数根据标志设置 mysqli 错误报告模式异常、警告或无。当设置为 MYSQLI_REPORT_ALL 或 MYSQLI_REPORT_INDEX 时,它还会通知不使用索引(或使用错误索引)的查询。

语法

//面向对象风格
$mysqli_driver->report_mode;

//面向过程风格
mysqli_report(flags)

参数

标志 必需。 指定标志。它可以采用以下值:
  • MYSQLI_REPORT_OFF - 关闭报告
  • MYSQLI_REPORT_ERROR - 报告 mysqli 函数调用的错误
  • MYSQLI_REPORT_STRICT - 抛出 mysqli_sql_exception 错误而不是警告
  • MYSQLI_REPORT_INDEX - 报告查询中是否未使用索引或使用错误索引
  • MYSQLI_REPORT_ALL - 设置所有选项(报告全部)
从 PHP 8.1.0 开始,默认设置是 MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT。以前,它是 MYSQLI_REPORT_OFF。

返回值

返回true。

示例:面向对象风格

下面的示例显示了 mysqli_driver::$report_mode 属性的用法。

<?php
//激活上报
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL;

try {
  //建立与数据库的连接,如果连接
  //失败,会抛出mysqli_sql_exception
  $mysqli = new mysqli("localhost", "user", "password", "database");

  //从数据库获取查询结果
  $sql = "SELECT Name, Age FROM Employee ORDER BY Age";
  $result = $mysqli->query($sql);

  //处理从数据库检索的数据
  //- 将所有结果行作为关联数组获取
  $rows = $result->fetch_all(MYSQLI_ASSOC);

  //显示行
  foreach ($rows as $row) {
    printf("%s, %d\n", $row["Name"], $row["Age"]);
  }
} catch (mysqli_sql_exception $e) {
  error_log($e->__toString());
}
?>

上述代码的输出将类似于:

Marry, 23
Kim, 26
John, 27
Adam, 28

示例:面向过程风格

下面的示例显示了mysqli_report()函数的用法。

<?php
//激活上报
mysqli_report(MYSQLI_REPORT_ALL);

try {
  //建立与数据库的连接
  $mysqli = mysqli_connect("localhost", "user", "password", "database");

  //从数据库获取查询结果
  $sql = "SELECT Name, Age FROM Employee ORDER BY Age";
  $result = mysqli_query($mysqli, $sql);

  //处理从数据库检索的数据
  //- 将所有结果行作为关联数组获取
  $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);

  //显示行
  foreach ($rows as $row) {
    printf("%s, %d\n", $row["Name"], $row["Age"]);
  }
} catch (mysqli_sql_exception $e) {
  error_log($e->__toString());
}
?>

上面代码的输出将类似to:

Marry, 23
Kim, 26
John, 27
Adam, 28

示例:除坏索引错误外的错误报告

下面的示例显示如何使用此函数来报告除坏索引错误外的所有错误。

<?php
//激活上报
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
  //建立与数据库的连接
  $mysqli = mysqli_connect("localhost", "user", "password", "database");

  //从数据库获取查询结果
  $sql = "SELECT Name, Age FROM Employee ORDER BY Age";
  $result = mysqli_query($mysqli, $sql);

  //处理从数据库检索的数据
  //- 将所有结果行作为关联数组获取
  $rows = mysqli_fetch_all($result, MYSQLI_ASSOC);

  //显示行
  foreach ($rows as $row) {
    printf("%s, %d\n", $row["Name"], $row["Age"]);
  }
} catch (mysqli_sql_exception $e) {
  error_log($e->__toString());
}
?>

上述代码的输出将类似于:

Marry, 23
Kim, 26
John, 27
Adam, 28