Doc #79591 [Com]: mysqli::$errno not an integer after connection close
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)