PHP Conference Japan 2024

mysqli::get_warnings

mysqli_get_warnings

(PHP 5 >= 5.1.0, PHP 7, PHP 8)

mysqli::get_warnings -- mysqli_get_warnings获取 SHOW WARNINGS 的结果

描述

面向对象风格

public mysqli::get_warnings(): mysqli_warning|false

过程化风格

mysqli_get_warnings(mysqli $mysql): mysqli_warning|false

返回一个由 mysqli_warning 组成的单向链表,如果没有任何警告则返回 false。列表中的每个对象都对应于 SHOW WARNINGS 结果中的一行。调用 mysqli_warning::next() 将使用下一行中的值重新填充对象。

注意: 要检索警告消息,建议使用 SQL 命令 SHOW WARNINGS [limit row_count] 而不是此函数。

警告

无法倒回或再次检索此链表。

参数

mysql

仅过程化风格:由 mysqli_connect()mysqli_init() 返回的 mysqli 对象

返回值

返回一个由 mysqli_warning 组成的单向链表,如果没有任何警告则返回 false

范例

范例 #1 遍历链表以获取所有警告

面向对象风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

$mysqli->query("SELECT 1/0, CAST('NULL' AS UNSIGNED)");

if (
$mysqli->warning_count > 0) {
$warning = $mysqli->get_warnings();
if (
$warning !== false) {
do {
printf("Error number: %s\n", $warning->errno);
printf("Message: %s\n", $warning->message);
} while (
$warning->next());
}
}

过程化风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "user", "password", "test");

mysqli_query($link, "SELECT 1/0, CAST('NULL' AS UNSIGNED)");

if (
mysqli_warning_count($link) > 0) {
$warning = mysqli_get_warnings($link);
if (
$warning !== false) {
do {
printf("Error number: %s\n", $warning->errno);
printf("Message: %s\n", $warning->message);
} while (
$warning->next());
}
}

以上示例将输出

Error number: 1365
Message: Division by 0
Error number: 1292
Message: Truncated incorrect INTEGER value: 'NULL'
添加注释

用户贡献的注释 1 条注释

9
匿名
10 年前
注意
调用此函数将更改 mysqli_affected_rows 的输出,如果返回任何警告。因此,如果您在应用程序中使用 mysqli_affected_rows,请确保在调用 mysqli_get_warnings 之前调用它。
To Top