PHP 8.4.0 RC4 available for testing

mysqli::get_warnings

mysqli_get_warnings

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

mysqli::get_warnings -- mysqli_get_warningsSHOW WARNINGS の結果を取得する

説明

オブジェクト指向型

public mysqli::get_warnings(): mysqli_warning|false

手続き型

mysqli_get_warnings(mysqli $mysql): mysqli_warning|false
警告

この関数は、 現在のところ詳細な情報はありません。引数のリストのみが 記述されています。

add a note

User Contributed Notes 3 notes

up
18
marcus at synchromedia dot co dot uk
15 years ago
With a bit of rooting about with reflection, I spotted that the mysqli_warning class has a next() function, so I tried calling it and it does indeed progress through the available warnings! Following on from my earlier example:

<?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();
}
}
?>

There is a simple way of traversing the warnings:

<?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());
}
?>
up
9
Anonymous
10 years ago
Take note:
Calling this function will change the output of mysqli_affected_rows if any warnings are returned. So if you're using mysqli_affected_rows in your application, make sure to call it before calling mysqli_get_warnings.
up
0
marcus at synchromedia dot co dot uk
15 years ago
I'm not sure how useful this function is as implemented. Take this example:

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 |
+---------+------+----------------------------------------+

Doing the same from PHP using mysqli_get_warnings(), you get this instead:

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

i.e. it only returns the first warning. I suspect it should return an array of these objects rather than just one. At least you know what the return value looks like now, since the docs don't say!
To Top