Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | 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;
621 lars 11
use Generator;
148 lars 12
use mysqli;
13
use mysqli_sql_exception;
621 lars 14
use SensitiveParameter;
148 lars 15
 
16
final class Driver extends AbstractMySQLDriver
17
{
18
    /**
19
     * {@inheritdoc}
20
     *
21
     * @return Connection
22
     */
621 lars 23
    public function connect(
24
        #[SensitiveParameter]
25
        array $params
26
    ) {
148 lars 27
        if (! empty($params['persistent'])) {
28
            if (! isset($params['host'])) {
29
                throw HostRequired::forPersistentConnection();
30
            }
31
 
32
            $host = 'p:' . $params['host'];
33
        } else {
34
            $host = $params['host'] ?? null;
35
        }
36
 
37
        $connection = new mysqli();
38
 
621 lars 39
        foreach ($this->compilePreInitializers($params) as $initializer) {
148 lars 40
            $initializer->initialize($connection);
41
        }
42
 
43
        try {
44
            $success = @$connection->real_connect(
45
                $host,
46
                $params['user'] ?? null,
47
                $params['password'] ?? null,
48
                $params['dbname'] ?? null,
49
                $params['port'] ?? null,
50
                $params['unix_socket'] ?? null,
621 lars 51
                $params['driverOptions'][Connection::OPTION_FLAGS] ?? 0,
148 lars 52
            );
53
        } catch (mysqli_sql_exception $e) {
54
            throw ConnectionFailed::upcast($e);
55
        }
56
 
57
        if (! $success) {
58
            throw ConnectionFailed::new($connection);
59
        }
60
 
621 lars 61
        foreach ($this->compilePostInitializers($params) as $initializer) {
148 lars 62
            $initializer->initialize($connection);
63
        }
64
 
65
        return new Connection($connection);
66
    }
67
 
68
    /**
621 lars 69
     * @param array<string, mixed> $params
148 lars 70
     *
621 lars 71
     * @return Generator<int, Initializer>
148 lars 72
     */
621 lars 73
    private function compilePreInitializers(
74
        #[SensitiveParameter]
75
        array $params
76
    ): Generator {
77
        unset($params['driverOptions'][Connection::OPTION_FLAGS]);
78
 
79
        if (isset($params['driverOptions']) && $params['driverOptions'] !== []) {
80
            yield new Options($params['driverOptions']);
148 lars 81
        }
82
 
83
        if (
621 lars 84
            ! isset($params['ssl_key']) &&
85
            ! isset($params['ssl_cert']) &&
86
            ! isset($params['ssl_ca']) &&
87
            ! isset($params['ssl_capath']) &&
88
            ! isset($params['ssl_cipher'])
148 lars 89
        ) {
621 lars 90
            return;
148 lars 91
        }
92
 
621 lars 93
        yield new Secure(
94
            $params['ssl_key']    ?? '',
95
            $params['ssl_cert']   ?? '',
96
            $params['ssl_ca']     ?? '',
97
            $params['ssl_capath'] ?? '',
98
            $params['ssl_cipher'] ?? '',
99
        );
148 lars 100
    }
101
 
102
    /**
621 lars 103
     * @param array<string, mixed> $params
148 lars 104
     *
621 lars 105
     * @return Generator<int, Initializer>
148 lars 106
     */
621 lars 107
    private function compilePostInitializers(
108
        #[SensitiveParameter]
109
        array $params
110
    ): Generator {
111
        if (! isset($params['charset'])) {
112
            return;
148 lars 113
        }
114
 
621 lars 115
        yield new Charset($params['charset']);
148 lars 116
    }
117
}