PHP 5.6.24 is released

mysqli::get_warnings

mysqli_get_warnings

(PHP 5 >= 5.1.0, PHP 7)

mysqli::get_warnings -- mysqli_get_warningsGet result of SHOW WARNINGS

Description

Object oriented style

mysqli_warning mysqli::get_warnings ( void )

Procedural style

mysqli_warning mysqli_get_warnings ( mysqli $link )
Warning

This function is currently not documented; only its argument list is available.

add a note add a note

User Contributed Notes 3 notes

up
8
marcus at synchromedia dot co dot uk
6 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
0
Anonymous
2 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
6 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