mysqli::get_warnings

mysqli_get_warnings

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

mysqli::get_warnings -- mysqli_get_warningsGet result of SHOW WARNINGS

说明

面向对象风格

public mysqli::get_warnings ( ) : mysqli_warning|false

过程化风格

mysqli_get_warnings ( mysqli $mysql ) : mysqli_warning|false
Warning

本函数还未编写文档,仅有参数列表。

User Contributed Notes

Anonymous 05-Mar-2014 08:36
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.
marcus at synchromedia dot co dot uk 19-Aug-2009 02:02
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());
}
?>
marcus at synchromedia dot co dot uk 19-Aug-2009 07:13
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!
PHP8中文手册 站长在线 整理 版权归PHP文档组所有