mysqli::get_warnings()
(PHP 5 >= 5.1.0, PHP 7)
Get result of SHOW WARNINGS
说明
面向对象风格
mysqli::get_warnings(void): mysqli_warning
过程化风格
mysqli_get_warnings(mysqli$link): mysqli_warning
Warning本函数还未编写文档,仅有参数列表。
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()); } ?>
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.
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!