Passed
Push — master ( 566a3a...fbef46 )
by 世昌
02:19
created

MySQLConnection::switchDatabase()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
namespace suda\database\connection;
3
4
use PDO;
5
use PDOException;
6
use ReflectionException;
7
use suda\database\statement\QueryStatement;
8
use suda\database\exception\SQLException;
9
10
/**
11
 * 数据表链接对象
12
 *
13
 */
14
class MySQLConnection extends Connection
15
{
16
    protected $type = 'mysql';
17
18
    /**
19
     * @return mixed|string
20
     * @throws SQLException
21
     */
22
    public function getDsn()
23
    {
24
        if (!array_key_exists('host', $this->config)) {
25
            throw new SQLException('config missing host');
26
        }
27
        
28
        $host = $this->config['host'];
29
        $charset = $this->config['charset'] ?? 'utf8mb4';
30
        $port = $this->config['port'] ?? 3306;
31
        if (array_key_exists('name', $this->config)) {
32
            return $this->type.':host='.$host.';dbname='.$this->config['name'].';charset='.$charset.';port='.$port;
33
        }
34
        return $this->type.':host='.$host.';charset='.$charset.';port='.$port;
35
    }
36
37
    /**
38
     * @return PDO
39
     * @throws SQLException
40
     */
41
    public function createPDO(): PDO
42
    {
43
        try {
44
            $user = $this->config['user'] ?? 'root';
45
            $password = $this->config['password'] ?? '';
46
            $pdo = new PDO($this->getDsn(), $user, $password);
47
            $this->id = static::$connectionCount;
48
            static::$connectionCount ++;
49
            return $pdo;
50
        } catch (PDOException $e) {
51
            throw new SQLException(sprintf(
52
                "%s connect database error:%s",
53
                $this->__toString(),
54
                $e->getMessage()
55
            ), $e->getCode(), $e);
56
        }
57
    }
58
59
    /**
60
     * @param string $database
61
     * @return mixed
62
     * @throws SQLException
63
     * @throws ReflectionException
64
     */
65
    public function switchDatabase(string $database)
66
    {
67
        return $this->query(new QueryStatement('USE `' . $database.'`'));
68
    }
69
70
    public function rawTableName(string $name)
71
    {
72
        $prefix = $this->config['prefix'] ?? '';
73
        return $prefix.$name;
74
    }
75
}
76