php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #79591 mysqli::$errno not an integer after connection close
Submitted: 2020-05-12 15:56 UTC Modified: 2023-01-10 16:02 UTC
Votes:1
Avg. Score:4.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:0 (0.0%)
From: vedad at kajtaz dot net Assigned:
Status: Wont fix Package: MySQLi related
PHP Version: 7.4.5 OS: FreeBSD 12.1-RELEASE
Private report: No CVE-ID: None
View Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
If you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: vedad at kajtaz dot net
New email:
PHP Version: OS:

 

 [2020-05-12 15:56 UTC] 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')

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2020-05-12 17:13 UTC] 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-13 09:34 UTC] cmb@php.net
-Type: Bug +Type: Documentation Problem
 [2020-05-13 09:34 UTC] 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-13 12:23 UTC] 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?
 [2023-01-10 16:02 UTC] dharman@php.net
-Status: Open +Status: Wont fix
 [2023-01-10 16:02 UTC] dharman@php.net
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.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Dec 21 13:01:31 2024 UTC