Doc #79591 [Com]: mysqli::$errno not an integer after connection close

From: Date: Wed, 13 May 2020 12:23:49 +0000
Subject: Doc #79591 [Com]: mysqli::$errno not an integer after connection close
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-17569@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=79591&edit=1

 ID:                 79591
 Comment by:         vedad at kajtaz dot net
 Reported by:        vedad at kajtaz dot net
 Summary:            mysqli::$errno not an integer after connection close
 Status:             Open
 Type:               Documentation Problem
 Package:            MySQLi related
 Operating System:   FreeBSD 12.1-RELEASE
 PHP Version:        7.4.5
 Block user comment: N
 Private report:     N

 New Comment:

Thanks, I agree with the Exception approach, and a documentation fix meanwhile.

The mysqli::$info issue I mentioned in a comment is unrelated to the connection being closed, should
I file a separate bug?


Previous Comments:
------------------------------------------------------------------------
[2020-05-13 09:34:42] cmb@php.net

After closing the connection, the connection is no longer valid.
In PHP 7 this should trigger a warning like "Couldn't fetch
mysqli".  In PHP 8 the warning will be elevated to an exception
("mysqli object is already closed").  So you really should not
access a closed mysqli object.

So this is not a bug, but it makes sense to document this behavior
more prominently.

------------------------------------------------------------------------
[2020-05-12 17:13:09] vedad at kajtaz dot net

Somehow related, there is also mysqli::$info resolving to null instead of empty string, as stated in
the documentation:

> Queries which do not fall into one of the preceding formats are not supported. In these
> situations, mysqli_info() will return an empty string.

------------------------------------------------------------------------
[2020-05-12 15:56:20] vedad at kajtaz dot net

Description:
------------
The documentation states that mysqli::$errno is an integer.

Once the mysqli connection was closed, it resolves to boolean false instead.

This is annoying when mysqli::$errno is being passed as second argument to \Throwable, which
triggers an Error with strict_types enabled.

Test script:
---------------
$mysqli = mysqli_init();

assert(is_int($mysqli->errno) && 'before connect');

assert($mysqli->real_connect(...));

assert(is_int($mysqli->errno) && 'before close');

$mysqli->close();

assert(is_int($mysqli->errno) && 'after close');


Actual result:
--------------
PHP Fatal error:  Uncaught AssertionError: assert(is_int($mysqli->errno) && 'after
close')


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=79591&edit=1


Thread (3 messages)

« previous php.doc.bugs (#17569) next »