Driver.php 1.77 KB
Newer Older
1 2
<?php

3
namespace Doctrine\DBAL\Driver\PDOMySql;
4

5
use Doctrine\DBAL\DBALException;
6
use Doctrine\DBAL\Driver\AbstractMySQLDriver;
Steve Müller's avatar
Steve Müller committed
7
use Doctrine\DBAL\Driver\PDOConnection;
8
use PDO;
9
use PDOException;
10

11 12 13
/**
 * PDO MySql driver.
 */
14
class Driver extends AbstractMySQLDriver
15
{
16
    /**
Benjamin Morel's avatar
Benjamin Morel committed
17
     * {@inheritdoc}
18
     */
19
    public function connect(array $params, $username = null, $password = null, array $driverOptions = [])
20
    {
21 22 23 24
        if (! empty($params['persistent'])) {
            $driverOptions[PDO::ATTR_PERSISTENT] = true;
        }

25
        try {
Steve Müller's avatar
Steve Müller committed
26
            $conn = new PDOConnection(
27
                $this->constructPdoDsn($params),
28 29 30 31 32 33 34
                $username,
                $password,
                $driverOptions
            );
        } catch (PDOException $e) {
            throw DBALException::driverException($this, $e);
        }
Benjamin Morel's avatar
Benjamin Morel committed
35

36
        return $conn;
37
    }
38

39 40 41
    /**
     * Constructs the MySql PDO DSN.
     *
42
     * @param mixed[] $params
Benjamin Morel's avatar
Benjamin Morel committed
43 44
     *
     * @return string The DSN.
45
     */
46
    protected function constructPdoDsn(array $params)
47 48
    {
        $dsn = 'mysql:';
49
        if (isset($params['host']) && $params['host'] !== '') {
50 51 52 53 54 55 56 57 58 59 60
            $dsn .= 'host=' . $params['host'] . ';';
        }
        if (isset($params['port'])) {
            $dsn .= 'port=' . $params['port'] . ';';
        }
        if (isset($params['dbname'])) {
            $dsn .= 'dbname=' . $params['dbname'] . ';';
        }
        if (isset($params['unix_socket'])) {
            $dsn .= 'unix_socket=' . $params['unix_socket'] . ';';
        }
61 62 63
        if (isset($params['charset'])) {
            $dsn .= 'charset=' . $params['charset'] . ';';
        }
64

65 66
        return $dsn;
    }
67

Benjamin Morel's avatar
Benjamin Morel committed
68 69
    /**
     * {@inheritdoc}
70 71
     *
     * @deprecated
Benjamin Morel's avatar
Benjamin Morel committed
72
     */
73 74 75 76
    public function getName()
    {
        return 'pdo_mysql';
    }
Benjamin Eberlei's avatar
Benjamin Eberlei committed
77
}