Skip to content

Commit d974d30

Browse files
committed
Remove trigger_error from Dbal\DbiMysqli::connect()
Replaces them with Dbal\ConnectionException. Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
1 parent 8be31ed commit d974d30

4 files changed

Lines changed: 28 additions & 11 deletions

File tree

src/DatabaseInterface.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use PhpMyAdmin\Config\Settings\Server;
88
use PhpMyAdmin\ConfigStorage\Relation;
99
use PhpMyAdmin\Dbal\Connection;
10+
use PhpMyAdmin\Dbal\ConnectionException;
1011
use PhpMyAdmin\Dbal\DbalInterface;
1112
use PhpMyAdmin\Dbal\DbiExtension;
1213
use PhpMyAdmin\Dbal\DbiMysqli;
@@ -1636,7 +1637,14 @@ public function connect(Server $currentServer, int $connectionType, int|null $ta
16361637
// Do not show location and backtrace for connection errors
16371638
$errorHandler = ErrorHandler::getInstance();
16381639
$errorHandler->setHideLocation(true);
1639-
$result = $this->extension->connect($server);
1640+
try {
1641+
$result = $this->extension->connect($server);
1642+
} catch (ConnectionException $exception) {
1643+
trigger_error($exception->getMessage(), E_USER_WARNING);
1644+
1645+
return null;
1646+
}
1647+
16401648
$errorHandler->setHideLocation(false);
16411649

16421650
if ($result !== null) {

src/Dbal/ConnectionException.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace PhpMyAdmin\Dbal;
6+
7+
use Exception;
8+
9+
class ConnectionException extends Exception
10+
{
11+
}

src/Dbal/DbiExtension.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ interface DbiExtension
1717
{
1818
/**
1919
* Connects to the database server.
20+
*
21+
* @throws ConnectionException
2022
*/
2123
public function connect(Server $server): Connection|null;
2224

src/Dbal/DbiMysqli.php

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@
2323
use function sprintf;
2424
use function str_contains;
2525
use function strtolower;
26-
use function trigger_error;
2726

28-
use const E_USER_ERROR;
29-
use const E_USER_WARNING;
3027
use const MYSQLI_CLIENT_COMPRESS;
3128
use const MYSQLI_CLIENT_SSL;
3229
use const MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT;
@@ -115,8 +112,10 @@ public function connect(Server $server): Connection|null
115112
return self::connect($server->withSSL(true));
116113
}
117114

115+
mysqli_report(MYSQLI_REPORT_OFF);
116+
118117
if ($errorNumber === 1045 && $server->hideConnectionErrors) {
119-
trigger_error(
118+
throw new ConnectionException(
120119
sprintf(
121120
__(
122121
'Error 1045: Access denied for user. Additional error information'
@@ -125,15 +124,12 @@ public function connect(Server $server): Connection|null
125124
'[code][doc@cfg_Servers_hide_connection_errors]'
126125
. '$cfg[\'Servers\'][$i][\'hide_connection_errors\'][/doc][/code]',
127126
),
128-
E_USER_ERROR,
127+
$errorNumber,
128+
$exception,
129129
);
130-
} else {
131-
trigger_error($errorNumber . ': ' . $errorMessage, E_USER_WARNING);
132130
}
133131

134-
mysqli_report(MYSQLI_REPORT_OFF);
135-
136-
return null;
132+
throw new ConnectionException($errorNumber . ': ' . $errorMessage, $errorNumber, $exception);
137133
}
138134

139135
$mysqli->options(MYSQLI_OPT_LOCAL_INFILE, (int) defined('PMA_ENABLE_LDI'));

0 commit comments

Comments
 (0)