Doc #79591 [Opn->Wfx]: mysqli::$errno not an integer after connection close

[email protected] Tue, 10 Jan 2023 16:02:37 +0000
Newsgroups php.doc.bugs
Message-ID <[email protected]>
Edit report at https://bugs.php.net/bug.php?id=79591&edit=1

 ID:                 79591
 Updated by:         [email protected]
 Reported by:        vedad at kajtaz dot net
 Summary:            mysqli::$errno not an integer after connection close
-Status:             Open
+Status:             Wont fix
 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:

As this is only relevant for PHP 7 which has reached EOL I see no reason to keep this open anymore. I also don't think it should be documented as this is not something that should be done on purpose. In this regard, I would treat it more as undefined behaviour. Using a closed object would generate a warning and return false from whichever function you tried to use. I am glad we got rid of warnings.


Previous Comments:
------------------------------------------------------------------------
[2020-05-13 12:23:49] vedad at kajtaz dot net

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?

------------------------------------------------------------------------
[2020-05-13 09:34:42] [email protected]

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