Subversion-Projekte lars-tiefland.laravel_shop

Revision

Zur aktuellen Revision | Details | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Doctrine\DBAL\Driver\Mysqli;
4
 
5
use Doctrine\DBAL\Driver\AbstractMySQLDriver;
6
use Doctrine\DBAL\Driver\Mysqli\Exception\ConnectionFailed;
7
use Doctrine\DBAL\Driver\Mysqli\Exception\HostRequired;
8
use Doctrine\DBAL\Driver\Mysqli\Initializer\Charset;
9
use Doctrine\DBAL\Driver\Mysqli\Initializer\Options;
10
use Doctrine\DBAL\Driver\Mysqli\Initializer\Secure;
11
use mysqli;
12
use mysqli_sql_exception;
13
 
14
use function count;
15
 
16
final class Driver extends AbstractMySQLDriver
17
{
18
    /**
19
     * {@inheritdoc}
20
     *
21
     * @return Connection
22
     */
23
    public function connect(array $params)
24
    {
25
        if (! empty($params['persistent'])) {
26
            if (! isset($params['host'])) {
27
                throw HostRequired::forPersistentConnection();
28
            }
29
 
30
            $host = 'p:' . $params['host'];
31
        } else {
32
            $host = $params['host'] ?? null;
33
        }
34
 
35
        $flags = 0;
36
 
37
        $preInitializers = $postInitializers = [];
38
 
39
        if (isset($params['driverOptions'])) {
40
            $driverOptions = $params['driverOptions'];
41
 
42
            if (isset($driverOptions[Connection::OPTION_FLAGS])) {
43
                $flags = $driverOptions[Connection::OPTION_FLAGS];
44
                unset($driverOptions[Connection::OPTION_FLAGS]);
45
            }
46
 
47
            $preInitializers = $this->withOptions($preInitializers, $driverOptions);
48
        }
49
 
50
        $preInitializers  = $this->withSecure($preInitializers, $params);
51
        $postInitializers = $this->withCharset($postInitializers, $params);
52
 
53
        $connection = new mysqli();
54
 
55
        foreach ($preInitializers as $initializer) {
56
            $initializer->initialize($connection);
57
        }
58
 
59
        try {
60
            $success = @$connection->real_connect(
61
                $host,
62
                $params['user'] ?? null,
63
                $params['password'] ?? null,
64
                $params['dbname'] ?? null,
65
                $params['port'] ?? null,
66
                $params['unix_socket'] ?? null,
67
                $flags,
68
            );
69
        } catch (mysqli_sql_exception $e) {
70
            throw ConnectionFailed::upcast($e);
71
        }
72
 
73
        if (! $success) {
74
            throw ConnectionFailed::new($connection);
75
        }
76
 
77
        foreach ($postInitializers as $initializer) {
78
            $initializer->initialize($connection);
79
        }
80
 
81
        return new Connection($connection);
82
    }
83
 
84
    /**
85
     * @param list<Initializer> $initializers
86
     * @param array<int,mixed>  $options
87
     *
88
     * @return list<Initializer>
89
     */
90
    private function withOptions(array $initializers, array $options): array
91
    {
92
        if (count($options) !== 0) {
93
            $initializers[] = new Options($options);
94
        }
95
 
96
        return $initializers;
97
    }
98
 
99
    /**
100
     * @param list<Initializer>   $initializers
101
     * @param array<string,mixed> $params
102
     *
103
     * @return list<Initializer>
104
     */
105
    private function withSecure(array $initializers, array $params): array
106
    {
107
        if (
108
            isset($params['ssl_key']) ||
109
            isset($params['ssl_cert']) ||
110
            isset($params['ssl_ca']) ||
111
            isset($params['ssl_capath']) ||
112
            isset($params['ssl_cipher'])
113
        ) {
114
            $initializers[] = new Secure(
115
                $params['ssl_key']    ?? '',
116
                $params['ssl_cert']   ?? '',
117
                $params['ssl_ca']     ?? '',
118
                $params['ssl_capath'] ?? '',
119
                $params['ssl_cipher'] ?? '',
120
            );
121
        }
122
 
123
        return $initializers;
124
    }
125
 
126
    /**
127
     * @param list<Initializer>   $initializers
128
     * @param array<string,mixed> $params
129
     *
130
     * @return list<Initializer>
131
     */
132
    private function withCharset(array $initializers, array $params): array
133
    {
134
        if (isset($params['charset'])) {
135
            $initializers[] = new Charset($params['charset']);
136
        }
137
 
138
        return $initializers;
139
    }
140
}