略微加速

PHP官方手册 - 互联网笔记

PHP - Manual: mysqli::get_warnings

2024-12-23

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
警告

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

add a noteadd a note

User Contributed Notes 3 notes

up
18
marcus at synchromedia dot co dot uk
12 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
8
Anonymous
8 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
12 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!

官方地址:https://www.php.net/manual/en/mysqli.get-warnings.php

北京半月雨文化科技有限公司.版权所有 京ICP备12026184号-3