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