<?php
+use Doctrine\DBAL\Configuration;
+use Doctrine\DBAL\Connection;
+use Doctrine\DBAL\DriverManager;
+
class IPF_Database
{
- public static function connect($database=null)
+ public static function connectDBAL($database)
{
- if (!$database)
- $database = IPF::get('database');
-
- $driver = \PFF\Arr::get($database, 'driver', 'mysql');
-
- $dsn = self::makeDsnForPDO($driver,
- \PFF\Arr::get($database, 'host', 'localhost'),
- \PFF\Arr::get($database, 'port'),
- \PFF\Arr::get($database, 'database'));
-
- $pdoClass = IPF::get('debug') ? 'PDOProfile' : 'PDO';
-
- $conn = new $pdoClass($dsn,
- \PFF\Arr::get($database, 'username'),
- \PFF\Arr::get($database, 'password'));
-
- $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
- $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
- if ($driver === 'mysql')
- $conn->exec('SET NAMES \'utf8\'');
- return $conn;
- }
-
- public static function connectDBAL($database=null)
- {
- if (!$database) {
- $database = IPF::get('database');
- }
-
- $config = new \Doctrine\DBAL\Configuration();
+ $config = new Configuration();
$connectionParams = array(
'driver' => 'pdo_' . \PFF\Arr::get($database, 'driver', 'mysql'),
'charset' => 'utf8',
);
- return \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
- }
-
- public static function makeDsnForPDO($driver, $host, $port, $database)
- {
- switch ($driver) {
- case 'sqlite':
- case 'sqlite2':
- case 'sqlite3':
- if ($host == ':memory') {
- return 'sqlite::memory:';
- } else {
- return $driver . ':' . $database;
- }
-
- case 'mssql':
- case 'dblib':
- return $driver . ':host=' . $host . ($port ? ':' . $port : '') . ';dbname=' . $database;
-
- case 'mysql':
- case 'informix':
- case 'oci8':
- case 'oci':
- case 'firebird':
- case 'pgsql':
- case 'odbc':
- case 'mock':
- case 'oracle':
- return $driver . ':host=' . $host . ($port ? ';port=' . $port : '') . ';dbname=' . $database;
-
- default:
- throw new Exception('Unknown driver '.$driver);
- }
+ return DriverManager::getConnection($connectionParams, $config);
}
- public static function queryOneObject(\Doctrine\DBAL\Connection $connection, $className, $sql, $params = [], $types = [])
+ public static function queryOneObject(Connection $connection, $className, $sql, $params = [], $types = [])
{
$stmt = $connection->executeQuery($sql, $params, $types);
$stmt->setFetchMode(\PDO::FETCH_CLASS, $className);
return $stmt->fetch();
}
- public static function queryAllObjects(\Doctrine\DBAL\Connection $connection, $className, $sql, $params = [], $types = [])
+ public static function queryAllObjects(Connection $connection, $className, $sql, $params = [], $types = [])
{
$stmt = $connection->executeQuery($sql, $params, $types);
return $stmt->fetchAll(\PDO::FETCH_CLASS, $className);
<?php
+use Doctrine\DBAL\Connection;
+use Pimple\Container;
+
class IPF_Session_App extends IPF_Application
{
/** @var SessionBackend[] */
private $backends;
- public function configure(\Pimple\Container $container)
+ public function configure(Container $container)
{
$this->backends = [
new CookieSessionBackend(),
class DBSessionBackend implements SessionBackend
{
- /** @var \Pimple\Container */
+ /** @var Container */
private $container;
/** @var string */
private $secret_key;
- public function __construct(Pimple\Container $container, $secret_key)
+ public function __construct(Container $container, $secret_key)
{
$this->container = $container;
$this->secret_key = $secret_key;
public function getData($key)
{
- $connection = $this->getDatabaseConnection();
+ $connection = $this->getConnection();
$stmt = $connection->prepare('SELECT data FROM session WHERE session_key = :key');
$stmt->bindValue('key', $key, PDO::PARAM_STR);
$stmt->execute();
public function save($key, $data)
{
- $connection = $this->getDatabaseConnection();
+ $connection = $this->getConnection();
if ($key) {
$stmt = $connection->prepare('UPDATE session SET data = :data, updated_at = NOW() WHERE session_key = :key');
} else {
public function delete($key)
{
- $connection = $this->getDatabaseConnection();
+ $connection = $this->getConnection();
$stmt = $connection->prepare('DELETE FROM session WHERE session_key = :key');
$stmt->bindValue('key', $key, PDO::PARAM_STR);
$stmt->execute();
}
/**
- * @return \PDO
+ * @return Connection
*/
- private function getDatabaseConnection()
+ private function getConnection()
{
- return $this->container['databaseConnection'];
+ return $this->container['db'];
}
}