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_warningsObtém o resultado de SHOW WARNINGS

Descrição

Estilo orientado a objetos

public mysqli::get_warnings(): mysqli_warning|false

Estilo procedural

mysqli_get_warnings(mysqli $mysql): mysqli_warning|false
Aviso

Esta função não está documentada; apenas a lista de argumentos está disponível.

adicione uma nota

Notas Enviadas por Usuários (em inglês) 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
10
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
-1
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