From 689597a237e38f81ea4c7b77d3b7be2847bf45db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Kucha=C5=99?= Date: Mon, 17 Sep 2018 13:01:09 +0200 Subject: [PATCH] PdoDriver: check for misconfigured PDO connections resource (#294) --- src/Dibi/Drivers/PdoDriver.php | 4 ++ tests/dibi/PdoDriver.providedConnection.phpt | 41 ++++++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 tests/dibi/PdoDriver.providedConnection.phpt diff --git a/src/Dibi/Drivers/PdoDriver.php b/src/Dibi/Drivers/PdoDriver.php index ffc6247be..0a797f909 100644 --- a/src/Dibi/Drivers/PdoDriver.php +++ b/src/Dibi/Drivers/PdoDriver.php @@ -78,6 +78,10 @@ public function connect(array &$config) } } + if ($this->connection->getAttribute(PDO::ATTR_ERRMODE) !== PDO::ERRMODE_SILENT) { + throw new Dibi\DriverException('PDO connection in exception or warning error mode is not supported.'); + } + $this->driverName = $this->connection->getAttribute(PDO::ATTR_DRIVER_NAME); $this->serverVersion = isset($config['version']) ? $config['version'] diff --git a/tests/dibi/PdoDriver.providedConnection.phpt b/tests/dibi/PdoDriver.providedConnection.phpt new file mode 100644 index 000000000..158593000 --- /dev/null +++ b/tests/dibi/PdoDriver.providedConnection.phpt @@ -0,0 +1,41 @@ +setAttribute(PDO::ATTR_ERRMODE, $errorMode); + } + $config = ['resource' => $pdo]; + $driver = new Dibi\Drivers\PdoDriver; + $driver->connect($config); +} + + +// PDO error mode: exception +Assert::exception(function () { + buildPdoDriver(PDO::ERRMODE_EXCEPTION); +}, 'Dibi\DriverException', 'PDO connection in exception or warning error mode is not supported.'); + + +// PDO error mode: warning +Assert::exception(function () { + buildPdoDriver(PDO::ERRMODE_WARNING); +}, 'Dibi\DriverException', 'PDO connection in exception or warning error mode is not supported.'); + + +// PDO error mode: explicitly set silent +test(function () { + buildPdoDriver(PDO::ERRMODE_SILENT); +}); + + +// PDO error mode: implicitly set silent +test(function () { + buildPdoDriver(null); +});