/
Mysql.php
114 lines (98 loc) · 2.41 KB
/
Mysql.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
namespace Cake\Model\Datasource\Database\Driver;
use PDO,
Cake\Model\Datasource\Database\Statement;
class Mysql extends \Cake\Model\Datasource\Database\Driver {
/**
* Base configuration settings for MySQL driver
*
* @var array
*/
protected $_baseConfig = [
'persistent' => true,
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'cake',
'port' => '3306',
'flags' => array(),
'encoding' => 'utf8'
];
/**
* Establishes a connection to the databse server
*
* @param array $config configuration to be used for creating connection
* @return boolean true on success
**/
public function connect(array $config) {
$config += $this->_baseConfig;
$flags = [
PDO::ATTR_PERSISTENT => $config['persistent'],
PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $config['encoding']
] + $config['flags'];
if (empty($config['unix_socket'])) {
$dsn = "mysql:host={$config['host']};port={$config['port']};dbname={$config['database']}";
} else {
$dsn = "mysql:unix_socket={$config['unix_socket']};dbname={$config['database']}";
}
$this->_connection = new PDO(
$dsn,
$config['login'],
$config['password'],
$flags
);
return true;
}
/**
* Disconnects from database server
*
* @return void
**/
public function disconnect() {
$this->_connection = null;
}
/**
* Returns whether php is able to use this driver for connecting to database
*
* @return boolean true if it is valid to use this driver
**/
public function enabled() {
return in_array('mysql', PDO::getAvailableDrivers());
}
/**
* Prepares a sql statement to be executed
*
* @param string $sql
* @return Cake\Model\Datasource\Database\Statement
**/
public function prepare($sql) {
$statement = $this->_connection->prepare($sql);
return new Statement($statement, $this);
}
/**
* Starts a transaction
*
* @return boolean true on success, false otherwise
**/
public function beginTransaction() {
return $this->_connection->beginTransaction();
}
/**
* Commits a transaction
*
* @return boolean true on success, false otherwise
**/
public function commitTransaction() {
return $this->_connection->commit();
}
/**
* Rollsback a transaction
*
* @return boolean true on success, false otherwise
**/
public function rollbackTransaction() {
return $this->_connection->rollback();
}
}