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
警告

此函数目前没有文档;只有其参数列表可用。

添加注释

用户贡献的注释 3 条注释

marcus at synchromedia dot co dot uk
14 年前
通过使用反射进行一些查找,我发现 mysqli_warning 类有一个 next() 函数,所以我尝试调用它,它确实遍历了可用的警告!从我之前的示例开始

<?php
$r
= mysqli_query($db, "INSERT INTO blah SET z = '1'");
$j = mysqli_warning_count($db);
if (
$j > 0) {
$e = mysqli_get_warnings($db);
for (
$i = 0; $i < $j; $i++) {
var_dump($e);
$e->next();
}
}
?>

有一种简单的方法可以遍历警告

<?php
$r
= mysqli_query($db, "INSERT INTO blah SET z = '1'");
if (
mysqli_warning_count($db)) {
$e = mysqli_get_warnings($db);
do {
echo
"Warning: $e->errno: $e->message\n";
} while (
$e->next());
}
?>
匿名
10 年前
注意
调用此函数将更改 mysqli_affected_rows 的输出,如果返回任何警告。因此,如果您在应用程序中使用 mysqli_affected_rows,请确保在调用 mysqli_get_warnings 之前调用它。
marcus at synchromedia dot co dot uk
14 年前
我不确定此函数在实现中有多有用。以这个例子为例

CREATE TABLE `blah` (
`x` varchar(100) NOT NULL,
`y` varchar(100) NOT NULL,
`z` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO blah SET z = '1';
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------+
| Warning | 1364 | Field 'x' doesn't have a default value |
| Warning | 1364 | Field 'y' doesn't have a default value |
+---------+------+----------------------------------------+

从 PHP 中使用 mysqli_get_warnings() 执行相同的操作,您将获得以下结果

object(mysqli_warning)#4 (3) {
["message"]=>
string(38) "Field 'x' doesn't have a default value"
["sqlstate"]=>
string(5) "HY000"
["errno"]=>
int(1364)
}

即它只返回第一个警告。我怀疑它应该返回这些对象的数组,而不仅仅是一个。至少您现在知道返回值是什么样子,因为文档中没有说明!
To Top