forked from YOURLS/YOURLS
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclass-mysql.php
115 lines (99 loc) · 3.22 KB
/
class-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
115
<?php
/**
* Connect to DB
*
* @since 1.0
* @return \YOURLS\Database\YDB
*/
function yourls_db_connect() {
global $ydb;
if ( !defined( 'YOURLS_DB_USER' )
or !defined( 'YOURLS_DB_PASS' )
or !defined( 'YOURLS_DB_NAME' )
or !defined( 'YOURLS_DB_HOST' )
) {
yourls_die( yourls__( 'Incorrect DB config, please refer to documentation' ), yourls__( 'Fatal error' ), 503 );
}
$dbhost = YOURLS_DB_HOST;
$user = YOURLS_DB_USER;
$pass = YOURLS_DB_PASS;
$dbname = YOURLS_DB_NAME;
// This action is deprecated
yourls_do_action( 'set_DB_driver', 'deprecated' );
// Get custom port if any
if ( false !== strpos( $dbhost, ':' ) ) {
list( $dbhost, $dbport ) = explode( ':', $dbhost );
$dbhost = sprintf( '%1$s;port=%2$d', $dbhost, $dbport );
}
$charset = yourls_apply_filter( 'db_connect_charset', 'utf8mb4' );
/**
* Data Source Name (dsn) used to connect the DB
*
* DSN with PDO is something like:
* 'mysql:host=123.4.5.6;dbname=test_db;port=3306'
* 'sqlite:/opt/databases/mydb.sq3'
* 'pgsql:host=192.168.13.37;port=5432;dbname=omgwtf'
*/
$dsn = sprintf( 'mysql:host=%s;dbname=%s;charset=%s', $dbhost, $dbname, $charset );
$dsn = yourls_apply_filter( 'db_connect_custom_dsn', $dsn );
/**
* PDO driver options and attributes
*
* The PDO constructor is something like:
* new PDO( string $dsn, string $username, string $password [, array $options ] )
* The driver options are passed to the PDO constructor, eg array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
* The attribute options are then set in a foreach($attr as $k=>$v){$db->setAttribute($k, $v)} loop
*/
$driver_options = yourls_apply_filter( 'db_connect_driver_option', [] ); // driver options as key-value pairs
$attributes = yourls_apply_filter( 'db_connect_attributes', [] ); // attributes as key-value pairs
$ydb = new \YOURLS\Database\YDB( $dsn, $user, $pass, $driver_options, $attributes );
$ydb->init();
// Past this point, we're connected
yourls_debug_log( sprintf( 'Connected to database %s on %s ', $dbname, $dbhost ) );
yourls_debug_mode( YOURLS_DEBUG );
return $ydb;
}
/**
* Helper function : return instance of the DB
*
* Instead of:
* global $ydb;
* $ydb->do_stuff()
* Prefer :
* yourls_get_db()->do_stuff()
*
* @since 1.7.10
* @return \YOURLS\Database\YDB
*/
function yourls_get_db() {
// Allow plugins to short-circuit the whole function
$pre = yourls_apply_filter( 'shunt_get_db', false );
if ( false !== $pre ) {
return $pre;
}
global $ydb;
$ydb = ( isset( $ydb ) ) ? $ydb : yourls_db_connect();
return yourls_apply_filter('get_db', $ydb);
}
/**
* Helper function : set instance of DB, or unset it
*
* Instead of:
* global $ydb;
* $ydb = stuff
* Prefer :
* yourls_set_db( stuff )
* (This is mostly used in the test suite)
*
* @since 1.7.10
* @param mixed $db Either a \YOURLS\Database\YDB instance, or anything. If null, the function will unset $ydb
* @return void
*/
function yourls_set_db($db) {
global $ydb;
if (is_null($db)) {
unset($ydb);
} else {
$ydb = $db;
}
}