PDOConnection.php 2.82 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;
7 8
use function count;
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 27
        try {
            parent::__construct($dsn, $user, $password, $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()
    {
72
        $args      = func_get_args();
javer's avatar
javer committed
73
        $argsCount = count($args);
74

75
        try {
76
            if ($argsCount === 4) {
77 78
                return parent::query($args[0], $args[1], $args[2], $args[3]);
            }
javer's avatar
javer committed
79

80
            if ($argsCount === 3) {
81 82
                return parent::query($args[0], $args[1], $args[2]);
            }
javer's avatar
javer committed
83

84
            if ($argsCount === 2) {
85 86
                return parent::query($args[0], $args[1]);
            }
javer's avatar
javer committed
87

88 89 90 91
            return parent::query($args[0]);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
92 93 94 95 96
    }

    /**
     * {@inheritdoc}
     */
97
    public function quote($input, $type = ParameterType::STRING)
98
    {
99
        return parent::quote($input, $type);
100 101 102 103 104 105 106
    }

    /**
     * {@inheritdoc}
     */
    public function lastInsertId($name = null)
    {
107 108 109 110 111
        try {
            return parent::lastInsertId($name);
        } catch (\PDOException $exception) {
            throw new PDOException($exception);
        }
112
    }
113 114 115 116 117 118 119 120

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