diff --git a/CHANGELOG.md b/CHANGELOG.md index 846e89a1..c8793bfb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - Confirm before exiting edited edit form - Display collation at table structure if different from table - Ctrl+click in select moves the cursor in modern browsers +- URL parameter ?ext=pdo to force using PDO - PostgreSQL: Display auto_increment of inserted rows - PostgreSQL: Display description of system variables - PostgreSQL: Avoid warning about crdb_version (bug #924, regression from 5.0.5) diff --git a/adminer/drivers/mssql.inc.php b/adminer/drivers/mssql.inc.php index 9e49a3a2..80742ccc 100644 --- a/adminer/drivers/mssql.inc.php +++ b/adminer/drivers/mssql.inc.php @@ -11,7 +11,7 @@ $drivers["mssql"] = "MS SQL"; if (isset($_GET["mssql"])) { define('Adminer\DRIVER', "mssql"); - if (extension_loaded("sqlsrv")) { + if (extension_loaded("sqlsrv") && $_GET["ext"] != "pdo") { class Db { public $extension = "sqlsrv", $server_info, $affected_rows, $errno, $error; private $link, $result; diff --git a/adminer/drivers/mysql.inc.php b/adminer/drivers/mysql.inc.php index 88d7fe05..669adca4 100644 --- a/adminer/drivers/mysql.inc.php +++ b/adminer/drivers/mysql.inc.php @@ -6,7 +6,7 @@ $drivers = array("server" => "MySQL / MariaDB") + $drivers; if (!defined('Adminer\DRIVER')) { define('Adminer\DRIVER', "server"); // server - backwards compatibility // MySQLi supports everything, MySQL doesn't support multiple result sets, PDO_MySQL doesn't support orgtable - if (extension_loaded("mysqli")) { + if (extension_loaded("mysqli") && $_GET["ext"] != "pdo") { class Db extends \MySQLi { public $extension = "MySQLi"; diff --git a/adminer/drivers/oracle.inc.php b/adminer/drivers/oracle.inc.php index bf65a90f..cb07fcb2 100644 --- a/adminer/drivers/oracle.inc.php +++ b/adminer/drivers/oracle.inc.php @@ -5,7 +5,7 @@ $drivers["oracle"] = "Oracle (beta)"; if (isset($_GET["oracle"])) { define('Adminer\DRIVER', "oracle"); - if (extension_loaded("oci8")) { + if (extension_loaded("oci8") && $_GET["ext"] != "pdo") { class Db { public $extension = "oci8", $server_info, $affected_rows, $errno, $error; public $_current_db; diff --git a/adminer/drivers/pgsql.inc.php b/adminer/drivers/pgsql.inc.php index c29c7b31..5612c5a4 100644 --- a/adminer/drivers/pgsql.inc.php +++ b/adminer/drivers/pgsql.inc.php @@ -5,7 +5,7 @@ $drivers["pgsql"] = "PostgreSQL"; if (isset($_GET["pgsql"])) { define('Adminer\DRIVER', "pgsql"); - if (extension_loaded("pgsql")) { + if (extension_loaded("pgsql") && $_GET["ext"] != "pdo") { class Db { public $extension = "PgSQL", $server_info, $affected_rows, $error, $timeout; private $link, $result, $string, $database = true; diff --git a/adminer/drivers/sqlite.inc.php b/adminer/drivers/sqlite.inc.php index a4352150..3b9fc0a9 100644 --- a/adminer/drivers/sqlite.inc.php +++ b/adminer/drivers/sqlite.inc.php @@ -5,7 +5,7 @@ $drivers["sqlite"] = "SQLite"; if (isset($_GET["sqlite"])) { define('Adminer\DRIVER', "sqlite"); - if (class_exists("SQLite3")) { + if (class_exists("SQLite3") && $_GET["ext"] != "pdo") { class SqliteDb { public $extension = "SQLite3", $server_info, $affected_rows, $errno, $error; diff --git a/adminer/include/bootstrap.inc.php b/adminer/include/bootstrap.inc.php index 19ec69dc..14b5d54d 100644 --- a/adminer/include/bootstrap.inc.php +++ b/adminer/include/bootstrap.inc.php @@ -98,6 +98,7 @@ define( preg_replace('~\?.*~', '', relative_uri()) . '?' . (sid() ? SID . '&' : '') . (SERVER !== null ? DRIVER . "=" . urlencode(SERVER) . '&' : '') + . ($_GET["ext"] ? "ext=" . urlencode($_GET["ext"]) . '&' : '') . (isset($_GET["username"]) ? "username=" . urlencode($_GET["username"]) . '&' : '') . (DB != "" ? 'db=' . urlencode(DB) . '&' . (isset($_GET["ns"]) ? "ns=" . urlencode($_GET["ns"]) . "&" : "") : '') ); diff --git a/adminer/include/functions.inc.php b/adminer/include/functions.inc.php index 4e995ed4..d9988f33 100644 --- a/adminer/include/functions.inc.php +++ b/adminer/include/functions.inc.php @@ -457,7 +457,7 @@ function set_session($key, $val) { function auth_url($vendor, $server, $username, $db = null) { global $drivers; $uri = remove_from_uri(implode("|", array_keys($drivers)) - . "|username|" + . "|username|ext|" . ($db !== null ? "db|" : "") . ($vendor == 'mssql' || $vendor == 'pgsql' ? "" : "ns|") // we don't have access to support() here . session_name()) @@ -466,6 +466,7 @@ function auth_url($vendor, $server, $username, $db = null) { return "$match[1]?" . (sid() ? SID . "&" : "") . ($vendor != "server" || $server != "" ? urlencode($vendor) . "=" . urlencode($server) . "&" : "") + . ($_GET["ext"] ? "ext=" . urlencode($_GET["ext"]) . "&" : "") . "username=" . urlencode($username) . ($db != "" ? "&db=" . urlencode($db) : "") . ($match[2] ? "&$match[2]" : "")