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

From: Date: Wed, 13 May 2020 09:34:42 +0000
Subject: Bug->Doc #79591 [Opn]: mysqli::$errno not an integer after connection close
References: 1  Groups: php.doc.bugs 
Request: Send a blank email to doc-bugs+get-17566@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
 Updated by:         cmb@php.net
 Reported by:        vedad at kajtaz dot net
 Summary:            mysqli::$errno not an integer after connection close
 Status:             Open
-Type:               Bug
+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:

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.


Previous Comments:
------------------------------------------------------------------------
[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 (#17566) next »