diff --git a/libraries/classes/Controllers/Database/MultiTableQuery/QueryController.php b/libraries/classes/Controllers/Database/MultiTableQuery/QueryController.php
index 238a55d45b..a63f594259 100644
--- a/libraries/classes/Controllers/Database/MultiTableQuery/QueryController.php
+++ b/libraries/classes/Controllers/Database/MultiTableQuery/QueryController.php
@@ -12,11 +12,9 @@ final class QueryController extends AbstractController
{
public function __invoke(ServerRequest $request): void
{
- $params = [
- 'sql_query' => $request->getParsedBodyParam('sql_query'),
- 'db' => $request->getParam('db'),
- ];
-
- $this->response->addHTML(MultiTableQuery::displayResults($params['sql_query'], $params['db']));
+ $this->response->addHTML(MultiTableQuery::displayResults(
+ $request->getParsedBodyParam('sql_query'),
+ $request->getParam('db')
+ ));
}
}
diff --git a/libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php b/libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php
index 7f6c4366da..98e8289115 100644
--- a/libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php
+++ b/libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php
@@ -26,13 +26,13 @@ final class TablesController extends AbstractController
public function __invoke(ServerRequest $request): void
{
- $params = [
- 'tables' => $request->getQueryParam('tables', []),
- 'db' => $request->getQueryParam('db', ''),
- ];
+ /** @var string[] $tables */
+ $tables = $request->getQueryParam('tables', []);
+ /** @var string $db */
+ $db = $request->getQueryParam('db', '');
$tablesListForQuery = '';
- foreach ($params['tables'] as $table) {
+ foreach ($tables as $table) {
$tablesListForQuery .= "'" . $this->dbi->escapeString($table) . "',";
}
@@ -40,7 +40,7 @@ final class TablesController extends AbstractController
$constrains = $this->dbi->fetchResult(
QueryGenerator::getInformationSchemaForeignKeyConstraintsRequest(
- $this->dbi->escapeString($params['db']),
+ $this->dbi->escapeString($db),
$tablesListForQuery
)
);
diff --git a/libraries/classes/Controllers/Database/SqlFormatController.php b/libraries/classes/Controllers/Database/SqlFormatController.php
index 1fd48e01c9..1aadaf6cda 100644
--- a/libraries/classes/Controllers/Database/SqlFormatController.php
+++ b/libraries/classes/Controllers/Database/SqlFormatController.php
@@ -8,8 +8,6 @@ use PhpMyAdmin\Controllers\AbstractController;
use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\SqlParser\Utils\Formatter;
-use function strlen;
-
/**
* Format SQL for SQL editors.
*/
@@ -17,8 +15,8 @@ class SqlFormatController extends AbstractController
{
public function __invoke(ServerRequest $request): void
{
- $params = ['sql' => $request->getParsedBodyParam('sql')];
- $query = strlen((string) $params['sql']) > 0 ? $params['sql'] : '';
+ /** @var string $query */
+ $query = $request->getParsedBodyParam('sql', '');
$this->response->addJSON(['sql' => Formatter::format($query)]);
}
}
diff --git a/libraries/classes/Controllers/LintController.php b/libraries/classes/Controllers/LintController.php
index 72cf1bb647..65cc34f5d3 100644
--- a/libraries/classes/Controllers/LintController.php
+++ b/libraries/classes/Controllers/LintController.php
@@ -12,6 +12,7 @@ use PhpMyAdmin\Http\ServerRequest;
use PhpMyAdmin\Linter;
use function header;
+use function is_array;
use function json_encode;
use function sprintf;
@@ -22,11 +23,6 @@ class LintController extends AbstractController
{
public function __invoke(ServerRequest $request): void
{
- $params = [
- 'sql_query' => $request->getParsedBodyParam('sql_query'),
- 'options' => $request->getParsedBodyParam('options'),
- ];
-
/**
* The SQL query to be analyzed.
*
@@ -38,7 +34,7 @@ class LintController extends AbstractController
*
* @var string
*/
- $sqlQuery = ! empty($params['sql_query']) ? $params['sql_query'] : '';
+ $sqlQuery = $request->getParsedBodyParam('sql_query', '');
$this->response->setAjax(true);
@@ -49,9 +45,8 @@ class LintController extends AbstractController
header(sprintf('%s: %s', $name, $value));
}
- if (! empty($params['options'])) {
- $options = $params['options'];
-
+ $options = $request->getParsedBodyParam('options');
+ if (is_array($options)) {
if (! empty($options['routineEditor'])) {
$sqlQuery = 'CREATE PROCEDURE `a`() ' . $sqlQuery;
} elseif (! empty($options['triggerEditor'])) {
diff --git a/libraries/classes/Controllers/Server/Databases/CreateController.php b/libraries/classes/Controllers/Server/Databases/CreateController.php
index 747ce63b8a..aac182ed57 100644
--- a/libraries/classes/Controllers/Server/Databases/CreateController.php
+++ b/libraries/classes/Controllers/Server/Databases/CreateController.php
@@ -18,7 +18,7 @@ use PhpMyAdmin\Util;
use function __;
use function array_key_exists;
use function explode;
-use function mb_strlen;
+use function is_string;
use function mb_strtolower;
use function str_contains;
@@ -35,12 +35,10 @@ final class CreateController extends AbstractController
public function __invoke(ServerRequest $request): void
{
- $params = [
- 'new_db' => $_POST['new_db'] ?? null,
- 'db_collation' => $_POST['db_collation'] ?? null,
- ];
+ $newDb = $request->getParsedBodyParam('new_db');
+ $dbCollation = $request->getParsedBodyParam('db_collation');
- if (! isset($params['new_db']) || mb_strlen($params['new_db']) === 0 || ! $this->response->isAjax()) {
+ if (! is_string($newDb) || $newDb === '' || ! $this->response->isAjax()) {
$this->response->addJSON(['message' => Message::error()]);
return;
@@ -48,23 +46,23 @@ final class CreateController extends AbstractController
// lower_case_table_names=1 `DB` becomes `db`
if ($this->dbi->getLowerCaseNames() === '1') {
- $params['new_db'] = mb_strtolower($params['new_db']);
+ $newDb = mb_strtolower($newDb);
}
/**
* Builds and executes the db creation sql query
*/
- $sqlQuery = 'CREATE DATABASE ' . Util::backquote($params['new_db']);
- if (! empty($params['db_collation'])) {
- [$databaseCharset] = explode('_', $params['db_collation']);
+ $sqlQuery = 'CREATE DATABASE ' . Util::backquote($newDb);
+ if (is_string($dbCollation) && $dbCollation !== '') {
+ [$databaseCharset] = explode('_', $dbCollation);
$charsets = Charsets::getCharsets($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']);
$collations = Charsets::getCollations($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']);
if (
array_key_exists($databaseCharset, $charsets)
- && array_key_exists($params['db_collation'], $collations[$databaseCharset])
+ && array_key_exists($dbCollation, $collations[$databaseCharset])
) {
$sqlQuery .= ' DEFAULT'
- . Util::getCharsetQueryPart($params['db_collation']);
+ . Util::getCharsetQueryPart($dbCollation);
}
}
@@ -81,10 +79,10 @@ final class CreateController extends AbstractController
$this->response->setRequestStatus(false);
} else {
- $GLOBALS['db'] = $params['new_db'];
+ $GLOBALS['db'] = $newDb;
$message = Message::success(__('Database %1$s has been created.'));
- $message->addParam($params['new_db']);
+ $message->addParam($newDb);
$scriptName = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabDatabase'], 'database');
@@ -92,7 +90,7 @@ final class CreateController extends AbstractController
'message' => $message,
'sql_query' => Generator::getMessage('', $sqlQuery, 'success'),
'url' => $scriptName . Url::getCommon(
- ['db' => $params['new_db']],
+ ['db' => $newDb],
! str_contains($scriptName, '?') ? '?' : '&'
),
];
diff --git a/libraries/classes/Controllers/Server/VariablesController.php b/libraries/classes/Controllers/Server/VariablesController.php
index 6ab0afc5e5..049b19fbad 100644
--- a/libraries/classes/Controllers/Server/VariablesController.php
+++ b/libraries/classes/Controllers/Server/VariablesController.php
@@ -37,16 +37,13 @@ class VariablesController extends AbstractController
public function __invoke(ServerRequest $request): void
{
- $GLOBALS['errorUrl'] = $GLOBALS['errorUrl'] ?? null;
-
- $params = ['filter' => $_GET['filter'] ?? null];
$GLOBALS['errorUrl'] = Url::getFromRoute('/');
if ($this->dbi->isSuperUser()) {
$this->dbi->selectDb('mysql');
}
- $filterValue = ! empty($params['filter']) ? $params['filter'] : '';
+ $filterValue = $request->getQueryParam('filter', '');
$this->addScriptFiles(['server/variables.js']);
diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon
index a6e6dfd141..51a723a928 100644
--- a/phpstan-baseline.neon
+++ b/phpstan-baseline.neon
@@ -1045,16 +1045,6 @@ parameters:
count: 1
path: libraries/classes/Controllers/Database/MultiTableQuery/QueryController.php
- -
- message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#"
- count: 1
- path: libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php
-
- -
- message: "#^Parameter \\#1 \\$str of method PhpMyAdmin\\\\DatabaseInterface\\:\\:escapeString\\(\\) expects string, mixed given\\.$#"
- count: 2
- path: libraries/classes/Controllers/Database/MultiTableQuery/TablesController.php
-
-
message: "#^Parameter \\#1 \\$collation of static method PhpMyAdmin\\\\Util\\:\\:getCharsetQueryPart\\(\\) expects string, mixed given\\.$#"
count: 2
@@ -1090,16 +1080,6 @@ parameters:
count: 1
path: libraries/classes/Controllers/Database/SqlController.php
- -
- message: "#^Cannot cast mixed to string\\.$#"
- count: 1
- path: libraries/classes/Controllers/Database/SqlFormatController.php
-
- -
- message: "#^Parameter \\#1 \\$query of static method PhpMyAdmin\\\\SqlParser\\\\Utils\\\\Formatter\\:\\:format\\(\\) expects string, mixed given\\.$#"
- count: 1
- path: libraries/classes/Controllers/Database/SqlFormatController.php
-
-
message: "#^Cannot access offset int\\<0, max\\> on mixed\\.$#"
count: 1
@@ -1365,21 +1345,6 @@ parameters:
count: 1
path: libraries/classes/Controllers/HomeController.php
- -
- message: "#^Cannot access offset 'eventEditor' on mixed\\.$#"
- count: 1
- path: libraries/classes/Controllers/LintController.php
-
- -
- message: "#^Cannot access offset 'routineEditor' on mixed\\.$#"
- count: 1
- path: libraries/classes/Controllers/LintController.php
-
- -
- message: "#^Cannot access offset 'triggerEditor' on mixed\\.$#"
- count: 1
- path: libraries/classes/Controllers/LintController.php
-
-
message: "#^Parameter \\#1 \\$partialDependencies of method PhpMyAdmin\\\\Normalization\\:\\:createNewTablesFor2NF\\(\\) expects array, mixed given\\.$#"
count: 1
diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 8e98dca026..9782477f5d 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -1219,19 +1219,10 @@
- $params['db']
- $params['sql_query']
+ $request->getParam('db')
+ $request->getParsedBodyParam('sql_query')
-
-
- $params['db']
- $table
-
-
- $table
-
-
$dbCollation
@@ -1387,14 +1378,6 @@
$delimiter
-
-
- $query
-
-
- $query
-
-
$params['selected'][]
@@ -2571,23 +2554,9 @@
-
- ['db' => $params['new_db']]
-
-
- $params['db_collation']
- $params['db_collation']
- $params['db_collation']
- $params['new_db']
- $params['new_db']
- $params['new_db']
-
-
- $params['db_collation']
- $params['db_collation']
- $params['new_db']
- $params['new_db']
-
+
+ $dbCollation
+
@@ -3042,7 +3011,7 @@
$serverVarsSession[$name]
- $GLOBALS['errorUrl']
+ $filterValue
$value
diff --git a/test/classes/Controllers/LintControllerTest.php b/test/classes/Controllers/LintControllerTest.php
index b85d27f031..033d0255f4 100644
--- a/test/classes/Controllers/LintControllerTest.php
+++ b/test/classes/Controllers/LintControllerTest.php
@@ -26,7 +26,13 @@ class LintControllerTest extends AbstractTestCase
public function testWithoutParams(): void
{
- $this->getLintController()($this->createStub(ServerRequest::class));
+ $request = $this->createStub(ServerRequest::class);
+ $request->method('getParsedBodyParam')->willReturnMap([
+ ['sql_query', '', ''],
+ ['options', null, null],
+ ]);
+
+ $this->getLintController()($request);
$output = $this->getActualOutputForAssertion();
$this->assertJson($output);
@@ -37,7 +43,7 @@ class LintControllerTest extends AbstractTestCase
{
$request = $this->createStub(ServerRequest::class);
$request->method('getParsedBodyParam')->willReturnMap([
- ['sql_query', null, 'SELECT * FROM `actor` WHERE `actor_id` = 1;'],
+ ['sql_query', '', 'SELECT * FROM `actor` WHERE `actor_id` = 1;'],
['options', null, null],
]);
@@ -88,7 +94,7 @@ class LintControllerTest extends AbstractTestCase
$request = $this->createStub(ServerRequest::class);
$request->method('getParsedBodyParam')->willReturnMap([
- ['sql_query', null, 'SELECT * FROM `actor` WHEREE `actor_id` = 1;'],
+ ['sql_query', '', 'SELECT * FROM `actor` WHEREE `actor_id` = 1;'],
['options', null, null],
]);
diff --git a/test/classes/Controllers/Server/Databases/CreateControllerTest.php b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
index 98ab64d053..7a35196087 100644
--- a/test/classes/Controllers/Server/Databases/CreateControllerTest.php
+++ b/test/classes/Controllers/Server/Databases/CreateControllerTest.php
@@ -49,9 +49,13 @@ final class CreateControllerTest extends AbstractTestCase
$template = new Template();
$controller = new CreateController($response, $template, $this->dbi);
- $_POST['new_db'] = 'test_db_error';
+ $request = $this->createStub(ServerRequest::class);
+ $request->method('getParsedBodyParam')->willReturnMap([
+ ['new_db', null, 'test_db_error'],
+ ['db_collation', null, null],
+ ]);
- $controller($this->createStub(ServerRequest::class));
+ $controller($request);
$actual = $response->getJSONResult();
$this->assertArrayHasKey('message', $actual);
@@ -62,10 +66,13 @@ final class CreateControllerTest extends AbstractTestCase
$controller = new CreateController($response, $template, $this->dbi);
- $_POST['new_db'] = 'test_db';
- $_POST['db_collation'] = 'utf8_general_ci';
+ $request = $this->createStub(ServerRequest::class);
+ $request->method('getParsedBodyParam')->willReturnMap([
+ ['new_db', null, 'test_db'],
+ ['db_collation', null, 'utf8_general_ci'],
+ ]);
- $controller($this->createStub(ServerRequest::class));
+ $controller($request);
$actual = $response->getJSONResult();
$this->assertArrayHasKey('message', $actual);