Skip to content

Commit

Permalink
PdoDriver: check for misconfigured PDO connections resource (#294)
Browse files Browse the repository at this point in the history
  • Loading branch information
jkuchar authored and dg committed Sep 17, 2018
1 parent a8ed2a3 commit 689597a
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/Dibi/Drivers/PdoDriver.php
Original file line number Diff line number Diff line change
Expand Up @@ -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']
Expand Down
41 changes: 41 additions & 0 deletions tests/dibi/PdoDriver.providedConnection.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?php

use Tester\Assert;

require __DIR__ . '/bootstrap.php';


function buildPdoDriver($errorMode)
{
$pdo = new PDO('sqlite::memory:');
if ($errorMode !== null) {
$pdo->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);
});

0 comments on commit 689597a

Please sign in to comment.