diff --git a/system/Database/Postgre/Connection.php b/system/Database/Postgre/Connection.php index a152b90aa539..6f6233d14b74 100644 --- a/system/Database/Postgre/Connection.php +++ b/system/Database/Postgre/Connection.php @@ -207,7 +207,13 @@ public function getVersion(): string protected function execute(string $sql) { try { - return pg_query($this->connID, $sql); + $result = pg_query($this->connID, $sql); + + if ($result === false && $this->DBDebug) { + throw new DatabaseException(pg_last_error($this->connID)); + } + + return $result; } catch (ErrorException $e) { $trace = array_slice($e->getTrace(), 2); // remove the call to error handler diff --git a/tests/system/Database/Live/BadQueryTest.php b/tests/system/Database/Live/BadQueryTest.php index 8b842b21b930..587cabc3bdec 100644 --- a/tests/system/Database/Live/BadQueryTest.php +++ b/tests/system/Database/Live/BadQueryTest.php @@ -53,4 +53,22 @@ public function testBadQueryDebugFalse(): void $this->enableDBDebug(); } + + public function testPostgreBadQueryDebugTrueWithWarningsDisabled(): void + { + if ($this->db->DBDriver !== 'Postgre') { + $this->markTestSkipped('This test is only for Postgre.'); + } + + $this->enableDBDebug(); + $errorReporting = error_reporting(E_ALL & ~E_WARNING); + + try { + $this->expectException(DatabaseException::class); + $this->expectExceptionMessage('table_does_not_exist'); + $this->db->query('SELECT * FROM table_does_not_exist'); + } finally { + error_reporting($errorReporting); + } + } }