注意
调用此函数将更改 mysqli_affected_rows 的输出,如果返回任何警告。因此,如果您在应用程序中使用 mysqli_affected_rows,请确保在调用 mysqli_get_warnings 之前调用它。
(PHP 5 >= 5.1.0, PHP 7, PHP 8)
mysqli::get_warnings -- mysqli_get_warnings — 获取 SHOW WARNINGS 的结果
面向对象风格
过程化风格
返回一个由 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'