Skip to content

Commit 25bc89f

Browse files
Code Modernization: Set the MySQLi error reporting off for PHP 8.1.
Prior to PHP 8.1, the default error handling mode was `MYSQLI_REPORT_OFF`. An error in the extension, database, query, or the database connection returned `false` and emitted a PHP warning: {{{ $mysqli = new mysqli("localhost", "non-existing-user", "", ""); Warning: mysqli::__construct(): (HY000/2002): No connection could be made because the target machine actively refused it in ... on line ... }}} From PHP 8.1 and later, the default error mode is set to `MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT`. An error in the extension, database, query, or the database connection throws an exception: {{{ $mysqli = new mysqli("localhost", "non-existing-user", "", ""); Fatal error: Uncaught mysqli_sql_exception: Connection refused in ...:... }}} WordPress has its own error reporting and gracefully handles the database errors by inspecting the error codes. Setting the MySQLi error reporting to off avoids fatal errors due to uncaught exceptions and maintains the current behavior. References: * [https://php.watch/versions/8.1/mysqli-error-mode PHP 8.1: MySQLi: Default error mode set to exceptions] * [https://wiki.php.net/rfc/mysqli_default_errmode PHP RFC: Change Default mysqli Error Mode] Props ayeshrajans, jrf. Fixes #52825. git-svn-id: https://develop.svn.wordpress.org/trunk@51582 602fd350-edb4-49c9-b593-d223f7449a82
1 parent 53f5ead commit 25bc89f

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/wp-includes/wp-db.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1627,6 +1627,13 @@ public function db_connect( $allow_bail = true ) {
16271627
$client_flags = defined( 'MYSQL_CLIENT_FLAGS' ) ? MYSQL_CLIENT_FLAGS : 0;
16281628

16291629
if ( $this->use_mysqli ) {
1630+
/*
1631+
* Set the MySQLi error reporting off because WordPress handles its own.
1632+
* This is due to the default value change from `MYSQLI_REPORT_OFF`
1633+
* to `MYSQLI_REPORT_ERROR|MYSQLI_REPORT_STRICT` in PHP 8.1.
1634+
*/
1635+
mysqli_report( MYSQLI_REPORT_OFF );
1636+
16301637
$this->dbh = mysqli_init();
16311638

16321639
$host = $this->dbhost;

0 commit comments

Comments
 (0)