From: Seb35 Date: Tue, 16 Jan 2018 19:02:11 +0000 (+0100) Subject: Remove support for PHP extension 'mysql' (not mysqli!) X-Git-Tag: 1.31.0-rc.0~884 X-Git-Url: http://git.heureux-cyclage.org/?a=commitdiff_plain;h=0ff2b7a77685b4f79239e0cd942a9660e98aa7ce;p=lhc%2Fweb%2Fwiklou.git Remove support for PHP extension 'mysql' (not mysqli!) This PHP extension was deprecated in PHP 5.5 and removed in PHP 7.0. The newer MySQL driver 'mysqli' is the default driver since MediaWiki 1.22 and 'mysql' was deprecated in MediaWiki 1.30. Bug: T120333 Change-Id: Icff7a63ab47ae1483de87ba6486945974699362b --- diff --git a/RELEASE-NOTES-1.31 b/RELEASE-NOTES-1.31 index 307a8b534a..695b88f641 100644 --- a/RELEASE-NOTES-1.31 +++ b/RELEASE-NOTES-1.31 @@ -171,6 +171,9 @@ changes to languages because of Phabricator reports. * The HtmlFormatter class was removed (deprecated in 1.27). The namespaced HtmlFormatter\HtmlFormatter class should be used instead. * License::getLicenses has been deprecated; use License::getLines instead. +* The driver 'mysql' for MySQL, deprecated in MediaWiki 1.30, has been removed. + The driver has been deprecated since PHP 5.5 and was removed in PHP 7.0. The + default driver for MySQL has been 'mysqli' since MediaWiki 1.22. == Compatibility == MediaWiki 1.31 requires PHP 5.5.9 or later. Although HHVM 3.18.5 or later is supported, diff --git a/autoload.php b/autoload.php index 5d6104cc04..cc35dc3ef7 100644 --- a/autoload.php +++ b/autoload.php @@ -345,7 +345,6 @@ $wgAutoloadLocalClasses = [ 'DatabaseLag' => __DIR__ . '/maintenance/lag.php', 'DatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php', 'DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php', - 'DatabaseMysql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysql.php', 'DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php', 'DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php', 'DatabaseOracle' => __DIR__ . '/includes/db/DatabaseOracle.php', @@ -1673,7 +1672,6 @@ $wgAutoloadLocalClasses = [ 'Wikimedia\\Rdbms\\Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php', 'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php', 'Wikimedia\\Rdbms\\DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php', - 'Wikimedia\\Rdbms\\DatabaseMysql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysql.php', 'Wikimedia\\Rdbms\\DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php', 'Wikimedia\\Rdbms\\DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php', 'Wikimedia\\Rdbms\\DatabasePostgres' => __DIR__ . '/includes/libs/rdbms/database/DatabasePostgres.php', diff --git a/includes/DefaultSettings.php b/includes/DefaultSettings.php index ab01c5f4d0..9208dec80b 100644 --- a/includes/DefaultSettings.php +++ b/includes/DefaultSettings.php @@ -1940,6 +1940,7 @@ $wgSharedSchema = false; * - user: DB user * - password: DB password * - type: DB type + * - driver: DB driver (when there are multiple drivers) * * - load: Ratio of DB_REPLICA load, must be >=0, the sum of all loads must be >0. * If this is zero for any given server, no normal query traffic will be diff --git a/includes/installer/MysqlInstaller.php b/includes/installer/MysqlInstaller.php index ab5701a8bf..6256204d97 100644 --- a/includes/installer/MysqlInstaller.php +++ b/includes/installer/MysqlInstaller.php @@ -73,7 +73,7 @@ class MysqlInstaller extends DatabaseInstaller { * @return bool */ public function isCompiled() { - return self::checkExtension( 'mysql' ) || self::checkExtension( 'mysqli' ); + return self::checkExtension( 'mysqli' ); } /** diff --git a/includes/libs/rdbms/database/Database.php b/includes/libs/rdbms/database/Database.php index 2eb5c5483d..323c147824 100644 --- a/includes/libs/rdbms/database/Database.php +++ b/includes/libs/rdbms/database/Database.php @@ -317,8 +317,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware * - flags : Optional bitfield of DBO_* constants that define connection, protocol, * buffering, and transaction behavior. It is STRONGLY adviced to leave the DBO_DEFAULT * flag in place UNLESS this this database simply acts as a key/value store. - * - driver: Optional name of a specific DB client driver. For MySQL, there is the old - * 'mysql' driver and the newer 'mysqli' driver. + * - driver: Optional name of a specific DB client driver. For MySQL, there is only the + * 'mysqli' driver; the old one 'mysql' has been removed. * - variables: Optional map of session variables to set after connecting. This can be * used to adjust lock timeouts or encoding modes and the like. * - connLogger: Optional PSR-3 logger interface instance. @@ -337,7 +337,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware */ final public static function factory( $dbType, $p = [] ) { static $canonicalDBTypes = [ - 'mysql' => [ 'mysqli', 'mysql' ], + 'mysql' => [ 'mysqli' ], 'postgres' => [], 'sqlite' => [], 'oracle' => [], @@ -345,7 +345,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware ]; static $classAliases = [ 'DatabaseMssql' => DatabaseMssql::class, - 'DatabaseMysql' => DatabaseMysql::class, 'DatabaseMysqli' => DatabaseMysqli::class, 'DatabaseSqlite' => DatabaseSqlite::class, 'DatabasePostgres' => DatabasePostgres::class diff --git a/includes/libs/rdbms/database/DatabaseMysql.php b/includes/libs/rdbms/database/DatabaseMysql.php deleted file mode 100644 index 58b092669b..0000000000 --- a/includes/libs/rdbms/database/DatabaseMysql.php +++ /dev/null @@ -1,210 +0,0 @@ -getBindingHandle(); - - if ( $this->bufferResults() ) { - $ret = mysql_query( $sql, $conn ); - } else { - $ret = mysql_unbuffered_query( $sql, $conn ); - } - - return $ret; - } - - /** - * @param string $realServer - * @return bool|resource MySQL Database connection or false on failure to connect - * @throws DBConnectionError - */ - protected function mysqlConnect( $realServer ) { - # Avoid a suppressed fatal error, which is very hard to track down - if ( !extension_loaded( 'mysql' ) ) { - throw new DBConnectionError( - $this, - "MySQL functions missing, have you compiled PHP with the --with-mysql option?\n" - ); - } - - $connFlags = 0; - if ( $this->mFlags & self::DBO_SSL ) { - $connFlags |= MYSQL_CLIENT_SSL; - } - if ( $this->mFlags & self::DBO_COMPRESS ) { - $connFlags |= MYSQL_CLIENT_COMPRESS; - } - - if ( ini_get( 'mysql.connect_timeout' ) <= 3 ) { - $numAttempts = 2; - } else { - $numAttempts = 1; - } - - $conn = false; - - # The kernel's default SYN retransmission period is far too slow for us, - # so we use a short timeout plus a manual retry. Retrying means that a small - # but finite rate of SYN packet loss won't cause user-visible errors. - for ( $i = 0; $i < $numAttempts && !$conn; $i++ ) { - if ( $i > 1 ) { - usleep( 1000 ); - } - if ( $this->mFlags & self::DBO_PERSISTENT ) { - $conn = mysql_pconnect( $realServer, $this->mUser, $this->mPassword, $connFlags ); - } else { - # Create a new connection... - $conn = mysql_connect( $realServer, $this->mUser, $this->mPassword, true, $connFlags ); - } - } - - return $conn; - } - - /** - * @param string $charset - * @return bool - */ - protected function mysqlSetCharset( $charset ) { - $conn = $this->getBindingHandle(); - - if ( function_exists( 'mysql_set_charset' ) ) { - return mysql_set_charset( $charset, $conn ); - } else { - return $this->query( 'SET NAMES ' . $charset, __METHOD__ ); - } - } - - /** - * @return bool - */ - protected function closeConnection() { - $conn = $this->getBindingHandle(); - - return mysql_close( $conn ); - } - - /** - * @return int - */ - function insertId() { - $conn = $this->getBindingHandle(); - - return mysql_insert_id( $conn ); - } - - /** - * @return int - */ - function lastErrno() { - if ( $this->mConn ) { - return mysql_errno( $this->mConn ); - } else { - return mysql_errno(); - } - } - - /** - * @return int - */ - function affectedRows() { - $conn = $this->getBindingHandle(); - - return mysql_affected_rows( $conn ); - } - - /** - * @param string $db - * @return bool - */ - function selectDB( $db ) { - $conn = $this->getBindingHandle(); - - $this->mDBname = $db; - - return mysql_select_db( $db, $conn ); - } - - protected function mysqlFreeResult( $res ) { - return mysql_free_result( $res ); - } - - protected function mysqlFetchObject( $res ) { - return mysql_fetch_object( $res ); - } - - protected function mysqlFetchArray( $res ) { - return mysql_fetch_array( $res ); - } - - protected function mysqlNumRows( $res ) { - return mysql_num_rows( $res ); - } - - protected function mysqlNumFields( $res ) { - return mysql_num_fields( $res ); - } - - protected function mysqlFetchField( $res, $n ) { - return mysql_fetch_field( $res, $n ); - } - - protected function mysqlFieldName( $res, $n ) { - return mysql_field_name( $res, $n ); - } - - protected function mysqlFieldType( $res, $n ) { - return mysql_field_type( $res, $n ); - } - - protected function mysqlDataSeek( $res, $row ) { - return mysql_data_seek( $res, $row ); - } - - protected function mysqlError( $conn = null ) { - return ( $conn !== null ) ? mysql_error( $conn ) : mysql_error(); // avoid warning - } - - protected function mysqlRealEscapeString( $s ) { - $conn = $this->getBindingHandle(); - - return mysql_real_escape_string( (string)$s, $conn ); - } -} - -class_alias( DatabaseMysql::class, 'DatabaseMysql' ); diff --git a/tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php b/tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php index a9f18807e6..5e59cfdb78 100644 --- a/tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php +++ b/tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php @@ -52,7 +52,7 @@ class FakeDatabaseMysqlBase extends DatabaseMysqlBase { protected function doQuery( $sql ) { } - // From DatabaseMysql + // From DatabaseMysqli protected function mysqlConnect( $realServer ) { }