PDOConnection.php 2.63 KB
Newer Older
romanb's avatar
romanb committed
1
<?php
2 3 4

namespace Doctrine\DBAL\Driver;

5
use Doctrine\DBAL\ParameterType;
Benjamin Morel's avatar
Benjamin Morel committed
6
use PDO;
Sergei Morozov's avatar
Sergei Morozov committed
7
use function assert;
8
use function func_get_args;
9

10
/**
11
 * PDO implementation of the Connection interface.
12 13
 * Used by all PDO-based drivers.
 */
14
class PDOConnection extends PDO implements Connection, ServerInfoAwareConnection
romanb's avatar
romanb committed
15
{
Benjamin Morel's avatar
Benjamin Morel committed
16
    /**
17 18 19 20
     * @param string       $dsn
     * @param string|null  $user
     * @param string|null  $password
     * @param mixed[]|null $options
21
     *
22
     * @throws PDOException In case of an error.
Benjamin Morel's avatar
Benjamin Morel committed
23
     */
24
    public function __construct($dsn, $user = null, $password = null, ?array $options = null)
romanb's avatar
romanb committed
25
    {
26
        try {
Sergei Morozov's avatar
Sergei Morozov committed
27
            parent::__construct($dsn, (string) $user, (string) $password, (array) $options);
28
            $this->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDOStatement::class, []]);
29 30 31 32
            $this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
romanb's avatar
romanb committed
33
    }
34

35 36 37 38 39 40 41 42 43 44 45 46
    /**
     * {@inheritdoc}
     */
    public function exec($statement)
    {
        try {
            return parent::exec($statement);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
    }

47 48 49 50 51 52 53 54
    /**
     * {@inheritdoc}
     */
    public function getServerVersion()
    {
        return PDO::getAttribute(PDO::ATTR_SERVER_VERSION);
    }

55 56 57
    /**
     * {@inheritdoc}
     */
58
    public function prepare($prepareString, $driverOptions = [])
59
    {
60 61 62 63 64
        try {
            return parent::prepare($prepareString, $driverOptions);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
65 66 67 68 69 70 71
    }

    /**
     * {@inheritdoc}
     */
    public function query()
    {
Sergei Morozov's avatar
Sergei Morozov committed
72
        $args = func_get_args();
73

74
        try {
Sergei Morozov's avatar
Sergei Morozov committed
75 76
            $stmt = parent::query(...$args);
            assert($stmt instanceof \PDOStatement);
javer's avatar
javer committed
77

Sergei Morozov's avatar
Sergei Morozov committed
78
            return $stmt;
79 80 81
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
82 83 84 85 86
    }

    /**
     * {@inheritdoc}
     */
87
    public function quote($input, $type = ParameterType::STRING)
88
    {
89
        return parent::quote($input, $type);
90 91 92 93 94 95 96
    }

    /**
     * {@inheritdoc}
     */
    public function lastInsertId($name = null)
    {
97
        try {
Sergei Morozov's avatar
Sergei Morozov committed
98 99 100 101
            if ($name === null) {
                return parent::lastInsertId();
            }

102 103 104 105
            return parent::lastInsertId($name);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
106
    }
107 108 109 110 111 112 113 114

    /**
     * {@inheritdoc}
     */
    public function requiresQueryForServerVersion()
    {
        return false;
    }
Benjamin Eberlei's avatar
Benjamin Eberlei committed
115
}