db_common.inc.php
4.1 KB
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Common includes for the database level views
*
* @package PhpMyAdmin
*/
use PhpMyAdmin\Core;
use PhpMyAdmin\Message;
use PhpMyAdmin\Response;
use PhpMyAdmin\Url;
use PhpMyAdmin\Util;
use PhpMyAdmin\Operations;
if (! defined('PHPMYADMIN')) {
exit;
}
PhpMyAdmin\Util::checkParameters(array('db'));
global $cfg;
global $db;
$response = Response::getInstance();
$is_show_stats = $cfg['ShowStats'];
$db_is_system_schema = $GLOBALS['dbi']->isSystemSchema($db);
if ($db_is_system_schema) {
$is_show_stats = false;
}
/**
* Defines the urls to return to in case of error in a sql statement
*/
$err_url_0 = 'index.php' . Url::getCommon();
$err_url = PhpMyAdmin\Util::getScriptNameForOption(
$GLOBALS['cfg']['DefaultTabDatabase'], 'database'
)
. Url::getCommon(array('db' => $db));
/**
* Ensures the database exists (else move to the "parent" script) and displays
* headers
*/
if (! isset($is_db) || ! $is_db) {
if (strlen($db) > 0) {
$is_db = $GLOBALS['dbi']->selectDb($db);
// This "Command out of sync" 2014 error may happen, for example
// after calling a MySQL procedure; at this point we can't select
// the db but it's not necessarily wrong
if ($GLOBALS['dbi']->getError() && $GLOBALS['errno'] == 2014) {
$is_db = true;
unset($GLOBALS['errno']);
}
} else {
$is_db = false;
}
// Not a valid db name -> back to the welcome page
$params = array('reload' => '1');
if (isset($message)) {
$params['message'] = $message;
}
$uri = './index.php' . Url::getCommonRaw($params);
if (strlen($db) === 0 || ! $is_db) {
$response = Response::getInstance();
if ($response->isAjax()) {
$response->setRequestStatus(false);
$response->addJSON(
'message',
Message::error(__('No databases selected.'))
);
} else {
Core::sendHeaderLocation($uri);
}
exit;
}
} // end if (ensures db exists)
/**
* Changes database charset if requested by the user
*/
if (isset($_REQUEST['submitcollation'])
&& isset($_REQUEST['db_collation'])
&& ! empty($_REQUEST['db_collation'])
) {
list($db_charset) = explode('_', $_REQUEST['db_collation']);
$sql_query = 'ALTER DATABASE '
. PhpMyAdmin\Util::backquote($db)
. ' DEFAULT' . Util::getCharsetQueryPart($_REQUEST['db_collation']);
$result = $GLOBALS['dbi']->query($sql_query);
$message = Message::success();
/**
* Changes tables charset if requested by the user
*/
if (
isset($_REQUEST['change_all_tables_collations']) &&
$_REQUEST['change_all_tables_collations'] == 'on'
) {
list($tables, , , , , , , ,) = PhpMyAdmin\Util::getDbInfo($db, null);
foreach($tables as $tableName => $data) {
$sql_query = 'ALTER TABLE '
. PhpMyAdmin\Util::backquote($db)
. '.'
. PhpMyAdmin\Util::backquote($tableName)
. 'DEFAULT '
. Util::getCharsetQueryPart($_REQUEST['db_collation']);
$GLOBALS['dbi']->query($sql_query);
/**
* Changes columns charset if requested by the user
*/
if (
isset($_REQUEST['change_all_tables_columns_collations']) &&
$_REQUEST['change_all_tables_columns_collations'] == 'on'
) {
$operations = new Operations();
$operations->changeAllColumnsCollation($db, $tableName, $_REQUEST['db_collation']);
}
}
}
unset($db_charset);
/**
* If we are in an Ajax request, let us stop the execution here. Necessary for
* db charset change action on db_operations.php. If this causes a bug on
* other pages, we might have to move this to a different location.
*/
if ($response->isAjax()) {
$response->setRequestStatus($message->isSuccess());
$response->addJSON('message', $message);
exit;
}
}
/**
* Set parameters for links
*/
$url_query = Url::getCommon(array('db' => $db));