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

namespace Doctrine\DBAL\Driver;

5 6 7
use Doctrine\DBAL\Driver\Connection as ConnectionInterface;
use Doctrine\DBAL\Driver\PDO\Exception;
use Doctrine\DBAL\Driver\PDO\Statement;
8
use Doctrine\DBAL\ParameterType;
Benjamin Morel's avatar
Benjamin Morel committed
9
use PDO;
10 11
use PDOException;
use PDOStatement;
12

Sergei Morozov's avatar
Sergei Morozov committed
13
use function assert;
14
use function func_get_args;
15

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

43 44 45 46 47 48
    /**
     * {@inheritdoc}
     */
    public function exec($statement)
    {
        try {
49 50 51 52
            $result = parent::exec($statement);
            assert($result !== false);

            return $result;
53 54
        } catch (PDOException $exception) {
            throw Exception::new($exception);
55 56 57
        }
    }

58 59 60 61 62 63 64 65
    /**
     * {@inheritdoc}
     */
    public function getServerVersion()
    {
        return PDO::getAttribute(PDO::ATTR_SERVER_VERSION);
    }

66
    /**
67 68 69
     * @param string          $prepareString
     * @param array<int, int> $driverOptions
     *
70
     * @return PDOStatement
71
     */
72
    public function prepare($prepareString, $driverOptions = [])
73
    {
74
        try {
75
            $statement = parent::prepare($prepareString, $driverOptions);
76
            assert($statement instanceof PDOStatement);
77 78

            return $statement;
79 80
        } catch (PDOException $exception) {
            throw Exception::new($exception);
81
        }
82 83 84 85
    }

    /**
     * {@inheritdoc}
86
     *
87
     * @return PDOStatement
88 89 90
     */
    public function query()
    {
Sergei Morozov's avatar
Sergei Morozov committed
91
        $args = func_get_args();
92

93
        try {
Sergei Morozov's avatar
Sergei Morozov committed
94
            $stmt = parent::query(...$args);
95
            assert($stmt instanceof PDOStatement);
javer's avatar
javer committed
96

Sergei Morozov's avatar
Sergei Morozov committed
97
            return $stmt;
98 99
        } catch (PDOException $exception) {
            throw Exception::new($exception);
100
        }
101 102 103 104 105
    }

    /**
     * {@inheritdoc}
     */
106
    public function quote($input, $type = ParameterType::STRING)
107
    {
108
        return parent::quote($input, $type);
109 110 111 112 113 114 115
    }

    /**
     * {@inheritdoc}
     */
    public function lastInsertId($name = null)
    {
116
        try {
Sergei Morozov's avatar
Sergei Morozov committed
117 118 119 120
            if ($name === null) {
                return parent::lastInsertId();
            }

121
            return parent::lastInsertId($name);
122 123
        } catch (PDOException $exception) {
            throw Exception::new($exception);
124
        }
125
    }
126 127 128 129 130 131 132 133

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