1269 lines
43 KiB
PHP
1269 lines
43 KiB
PHP
<?php
|
|
/* ----------------------------------------------------------------------
|
|
|
|
MyOOS [Dumper]
|
|
http://www.oos-shop.de/
|
|
|
|
Copyright (c) 2017 by the MyOOS Development Team.
|
|
----------------------------------------------------------------------
|
|
Based on:
|
|
|
|
MySqlDumper
|
|
http://www.mysqldumper.de
|
|
|
|
Copyright (C)2004-2011 Daniel Schlichtholz (admin@mysqldumper.de)
|
|
----------------------------------------------------------------------
|
|
Released under the GNU General Public License
|
|
---------------------------------------------------------------------- */
|
|
|
|
if (!defined('MOD_VERSION')) {
|
|
exit('No direct access.');
|
|
}
|
|
|
|
//SQL-Library laden
|
|
include './inc/sqllib.php';
|
|
|
|
if (!isset($config['sql_limit'])) {
|
|
$config['sql_limit'] = 30;
|
|
}
|
|
if (!isset($config['bb_width'])) {
|
|
$config['bb_width'] = 300;
|
|
}
|
|
if (!isset($config['bb_textcolor'])) {
|
|
$config['bb_textcolor'] = '#990033';
|
|
}
|
|
|
|
function ReadSQL()
|
|
{
|
|
global $SQL_ARRAY, $config;
|
|
$sf = $config['paths']['config'].'sql_statements';
|
|
if (!is_file($sf)) {
|
|
$fp = fopen($sf, 'w+');
|
|
fclose($fp);
|
|
@chmod($sf, 0777);
|
|
}
|
|
|
|
if ((is_array($SQL_ARRAY) && 0 == count($SQL_ARRAY)) && filesize($sf) > 0) {
|
|
$SQL_ARRAY = file($sf);
|
|
}
|
|
}
|
|
|
|
function WriteSQL()
|
|
{
|
|
global $SQL_ARRAY, $config;
|
|
$sf = $config['paths']['config'].'sql_statements';
|
|
$str = '';
|
|
for ($i = 0; $i < count($SQL_ARRAY); ++$i) {
|
|
$str .= $SQL_ARRAY[$i];
|
|
if ("\n" != substr($str, -1) && $i != (count($SQL_ARRAY) - 1)) {
|
|
$str .= "\n";
|
|
}
|
|
}
|
|
|
|
$fp = fopen($sf, 'wb');
|
|
fwrite($fp, $str);
|
|
fclose($fp);
|
|
}
|
|
|
|
function SQL_Name($index)
|
|
{
|
|
global $SQL_ARRAY;
|
|
$s = explode('|', $SQL_ARRAY[$index]);
|
|
return $s[0];
|
|
}
|
|
|
|
function SQL_String($index)
|
|
{
|
|
global $SQL_ARRAY;
|
|
if (isset($SQL_ARRAY[$index]) && !empty($SQL_ARRAY[$index])) {
|
|
$s = explode('|', $SQL_ARRAY[$index], 2);
|
|
return (isset($s[1])) ? $s[1] : '';
|
|
}
|
|
}
|
|
|
|
function SQL_ComboBox()
|
|
{
|
|
global $SQL_ARRAY, $tablename, $nl;
|
|
$s = '';
|
|
if (is_array($SQL_ARRAY) && count($SQL_ARRAY) > 0) {
|
|
$s = $nl.$nl.'<select class="SQLCombo" name="sqlcombo" onchange="this.form.sqltextarea.value=this.options[this.selectedIndex].value;">'.$nl;
|
|
$s .= '<option value="" selected>---</option>'.$nl;
|
|
for ($i = 0; $i < count($SQL_ARRAY); ++$i) {
|
|
$s .= '<option value="'.htmlspecialchars(stripslashes(SQL_String($i))).'">'.SQL_Name($i).'</option>'.$nl;
|
|
}
|
|
$s .= '</select>'.$nl.$nl;
|
|
}
|
|
return $s;
|
|
}
|
|
|
|
function Table_ComboBox()
|
|
{
|
|
global $db, $config, $lang, $nl;
|
|
$tabellen = mysqli_query($config['dbconnection'], 'SHOW TABLES FROM `'.$db.'`');
|
|
$num_tables = 0;
|
|
if (is_resource($tabellen)) {
|
|
$num_tables = mysqli_num_rows($tabellen);
|
|
}
|
|
$s = $nl.$nl.'<select class="SQLCombo" name="tablecombo" onchange="this.form.sqltextarea.value=this.options[this.selectedIndex].value;this.form.execsql.click();">'.$nl.'<option value="" selected> --- </option>'.$nl;
|
|
for ($i = 0; $i < $num_tables; ++$i) {
|
|
$t = mysqli_fetch_row($tabellen);
|
|
$s .= '<option value="SELECT * FROM `'.$db.'`.`'.$t[0].'`">'.$lang['L_TABLE'].' `'.$t[0].'`</option>'.$nl;
|
|
}
|
|
$s .= '</select>'.$nl.$nl;
|
|
return $s;
|
|
}
|
|
|
|
function TableComboBox($default = '')
|
|
{
|
|
global $db, $config, $lang, $nl;
|
|
|
|
$sql = "SHOW TABLES FROM $db";
|
|
$tabellen = mod_query($sql);
|
|
$s = '<option value="" '.(('' == $default) ? ' selected="selected"' : '').'> </option>'.$nl;
|
|
while ($row = mysqli_fetch_row($tabellen)) {
|
|
$t = $row[0];
|
|
$s .= '<option value="`'.$t.'`"'.(($default == '`'.$t.'`') ? ' selected="selected"' : '').'>`'.$t.'`</option>'.$nl;
|
|
}
|
|
return $s;
|
|
}
|
|
|
|
function DB_Exists($db)
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$erg = false;
|
|
|
|
$dbs = mod_query('SHOW DATABASES');
|
|
while ($row = mysqli_fetch_assoc($dbs)) {
|
|
if (strtolower($row['Database']) == strtolower($db)) {
|
|
$erg = true;
|
|
break;
|
|
}
|
|
}
|
|
return $erg;
|
|
}
|
|
|
|
function Table_Exists($db, $table)
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$sqlt = "SHOW TABLES FROM `$db`";
|
|
$res = mod_query($sqlt);
|
|
if ($res) {
|
|
$tables = [];
|
|
while ($row = mysqli_fetch_row($res)) {
|
|
$tables[] = $row[0];
|
|
}
|
|
if (in_array($table, $tables)) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function DB_Empty($dbn)
|
|
{
|
|
$r = "DROP DATABASE `$dbn`;\nCREATE DATABASE `$dbn`;";
|
|
return MOD_DoSQL($r);
|
|
}
|
|
|
|
function sqlReturnsRecords($sql)
|
|
{
|
|
global $mysql_SQLhasRecords;
|
|
$s = explode(' ', $sql);
|
|
return in_array(strtoupper($s[0]), $mysql_SQLhasRecords) ? 1 : 0;
|
|
}
|
|
|
|
function getCountSQLStatements($sql)
|
|
{
|
|
$z = 0;
|
|
$l = strlen($sql);
|
|
$inQuotes = false;
|
|
for ($i = 0; $i < $l; ++$i) {
|
|
if ("'" == $sql[$i] || '"' == $sql[$i]) {
|
|
$inQuotes = !$inQuotes;
|
|
}
|
|
if ((';' == $sql[$i] && false == $inQuotes) || $i == $l - 1) {
|
|
++$z;
|
|
}
|
|
}
|
|
return $z;
|
|
}
|
|
|
|
function splitSQLStatements2Array($sql)
|
|
{
|
|
$z = 0;
|
|
$sqlArr = [];
|
|
$tmp = '';
|
|
$sql = str_replace("\n", '', $sql);
|
|
$l = strlen($sql);
|
|
$inQuotes = false;
|
|
for ($i = 0; $i < $l; ++$i) {
|
|
$tmp .= $sql[$i];
|
|
if ("'" == $sql[$i] || '"' == $sql[$i]) {
|
|
$inQuotes = !$inQuotes;
|
|
}
|
|
if (';' == $sql[$i] && false == $inQuotes) {
|
|
++$z;
|
|
$sqlArr[] = $tmp;
|
|
$tmp = '';
|
|
}
|
|
}
|
|
if ('' != trim($tmp)) {
|
|
$sqlArr[] = $tmp;
|
|
}
|
|
return $sqlArr;
|
|
}
|
|
|
|
function DB_Copy($source, $destination, $drop_source = 0, $insert_data = 1)
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$SQL_Array = $t = '';
|
|
if (!DB_Exists($destination)) {
|
|
$res = MOD_DoSQL("CREATE DATABASE `$destination`;");
|
|
if (!$res) {
|
|
return false;
|
|
}
|
|
}
|
|
$SQL_Array .= "USE `$destination` ;\n";
|
|
$sql = "SHOW TABLES FROM $source";
|
|
$tabellen = mod_query($sql);
|
|
while ($row = mysqli_fetch_row($tabellen)) {
|
|
$table = strtolower($row[0]);
|
|
$sqlt = "SHOW CREATE TABLE `$source`.`$table`";
|
|
$res = mod_query($sqlt);
|
|
if ($res) {
|
|
$row = mysqli_fetch_row($res);
|
|
$c = $row[1];
|
|
if (';' == substr($c, -1)) {
|
|
$c = substr($c, 0, strlen($c) - 1);
|
|
}
|
|
$SQL_Array .= (1 == $insert_data) ? "$c SELECT * FROM `$source`.`$table` ;\n" : "$c ;\n";
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
mysqli_select_db($config['dbconnection'], $destination);
|
|
$res = MOD_DoSQL($SQL_Array);
|
|
if (1 == $drop_source && $res) {
|
|
mod_query("DROP DATABASE `$source`;");
|
|
}
|
|
return $res;
|
|
}
|
|
|
|
function Table_Copy($source, $destination, $insert_data, $destinationdb = '')
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$SQL_Array = $t = '';
|
|
$sqlc = "SHOW CREATE TABLE $source";
|
|
$res = mod_query($sqlc);
|
|
$row = mysqli_fetch_row($res);
|
|
$c = $row[1];
|
|
$a1 = strpos($c, '`');
|
|
$a2 = strpos($c, '`', $a1 + 1);
|
|
$c = substr($c, 0, $a1 + 1).$destination.substr($c, $a2);
|
|
if (';' == substr($c, -1)) {
|
|
$c = substr($c, 0, strlen($c) - 1);
|
|
}
|
|
$SQL_Array .= (1 == $insert_data) ? "$c SELECT * FROM $source ;\n" : "$c ;\n";
|
|
//echo "<h5>$SQL_Array</h5>";
|
|
MOD_DoSQL($SQL_Array);
|
|
}
|
|
|
|
function MOD_DoSQL($sqlcommands, $limit = '')
|
|
{
|
|
global $config, $out, $numrowsabs, $numrows, $num_befehle, $time_used, $sql;
|
|
|
|
if (!isset($sql['parser']['sql_commands'])) {
|
|
$sql['parser']['sql_commands'] = 0;
|
|
}
|
|
if (!isset($sql['parser']['sql_errors'])) {
|
|
$sql['parser']['sql_errors'] = 0;
|
|
}
|
|
|
|
$sql['parser']['time_used'] = getmicrotime();
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$out = $sqlcommand = '';
|
|
$allSQL = splitSQLStatements2Array($sqlcommands); //explode(';',preg_replace('/\r\n|\n/', '', $sqlcommands));
|
|
$sql_queries = count($allSQL);
|
|
|
|
if (!isset($allSQL[$sql_queries - 1])) {
|
|
--$sql_queries;
|
|
}
|
|
if (1 == $sql_queries) {
|
|
SQLParser($allSQL[0]);
|
|
++$sql['parser']['sql_commands'];
|
|
$out .= Stringformat(($sql['parser']['sql_commands']), 4).': '.$allSQL[0]."\n";
|
|
$result = mod_query($allSQL[0]);
|
|
} else {
|
|
$result = true;
|
|
for ($i = 0; $i < $sql_queries; ++$i) {
|
|
$allSQL[$i] = trim(rtrim($allSQL[$i]));
|
|
|
|
if ('' != $allSQL[$i]) {
|
|
$sqlcommand .= $allSQL[$i];
|
|
$sqlcommand = SQLParser($sqlcommand);
|
|
if (0 == $sql['parser']['start'] && 0 == $sql['parser']['end'] && '' != $sqlcommand) {
|
|
//sql complete
|
|
++$sql['parser']['sql_commands'];
|
|
$out .= Stringformat(($sql['parser']['sql_commands']), 4).': '.$sqlcommand."\n";
|
|
$result = $result && mod_query($sqlcommand);
|
|
$sqlcommand = '';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
$sql['parser']['time_used'] = getmicrotime() - $sql['parser']['time_used'];
|
|
return $result;
|
|
}
|
|
|
|
function SQLParser($command, $debug = 0)
|
|
{
|
|
global $sql;
|
|
$sql['parser']['start'] = $sql['parser']['end'] = 0;
|
|
$sql['parser']['sqlparts'] = 0;
|
|
if (!isset($sql['parser']['drop'])) {
|
|
$sql['parser']['drop'] = 0;
|
|
}
|
|
if (!isset($sql['parser']['create'])) {
|
|
$sql['parser']['create'] = 0;
|
|
}
|
|
if (!isset($sql['parser']['insert'])) {
|
|
$sql['parser']['insert'] = 0;
|
|
}
|
|
if (!isset($sql['parser']['update'])) {
|
|
$sql['parser']['update'] = 0;
|
|
}
|
|
if (!isset($sql['parser']['comment'])) {
|
|
$sql['parser']['comment'] = 0;
|
|
}
|
|
$Backslash = chr(92);
|
|
$s = rtrim(trim(($command)));
|
|
|
|
//Was ist das für eine Anfrage ?
|
|
if ('#' == substr($s, 0, 1) || '--' == substr($s, 0, 2)) {
|
|
++$sql['parser']['comment'];
|
|
$s = '';
|
|
} elseif ('DROP ' == strtoupper(substr($s, 0, 5))) {
|
|
++$sql['parser']['drop'];
|
|
} elseif ('CREATE ' == strtoupper(substr($s, 0, 7))) {
|
|
//Hier nur die Anzahl der Klammern zählen
|
|
$sql['parser']['start'] = 1;
|
|
$kl1 = substr_count($s, '(');
|
|
$kl2 = substr_count($s, ')');
|
|
if (0 == $kl2 - $kl1) {
|
|
$sql['parser']['start'] = 0;
|
|
++$sql['parser']['create'];
|
|
}
|
|
} elseif ('INSERT ' == strtoupper(substr($s, 0, 7)) || 'UPDATE ' == strtoupper(substr($s, 0, 7))) {
|
|
if ('INSERT ' == strtoupper(substr($s, 0, 7))) {
|
|
++$sql['parser']['insert'];
|
|
} else {
|
|
++$sql['parser']['update'];
|
|
}
|
|
$i = strpos(strtoupper($s), ' VALUES') + 7;
|
|
$st = substr($s, $i);
|
|
$i = strpos($st, '(') + 1;
|
|
$st = substr($st, $i);
|
|
$st = substr($st, 0, strlen($st) - 2);
|
|
|
|
$tb = explode(',', $st);
|
|
for ($i = 0; $i < count($tb); ++$i) {
|
|
$first = $B_Esc = $B_Ticks = $B_Dashes = 0;
|
|
$v = trim($tb[$i]);
|
|
//Ticks + Dashes zählen
|
|
for ($cpos = 2; $cpos <= strlen($v); ++$cpos) {
|
|
if ("'" == substr($v, (-1 * $cpos), 1)) {
|
|
++$B_Ticks;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
for ($cpos = 2; $cpos <= strlen($v); ++$cpos) {
|
|
if ('"' == substr($v, (-1 * $cpos), 1)) {
|
|
++$B_Dashes;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
//Backslashes zählen
|
|
for ($cpos = 2 + $B_Ticks; $cpos <= strlen($v); ++$cpos) {
|
|
if ('\\' == substr($v, (-1 * $cpos), 1)) {
|
|
++$B_Esc;
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ('NULL' == $v && 0 == $sql['parser']['start']) {
|
|
$sql['parser']['start'] = 1;
|
|
$sql['parser']['end'] = 1;
|
|
}
|
|
if (0 == $sql['parser']['start'] && is_numeric($v)) {
|
|
$sql['parser']['start'] = 1;
|
|
$sql['parser']['end'] = 1;
|
|
}
|
|
if (0 == $sql['parser']['start'] && '0X' == substr($v, 0, 2) && false == strpos($v, ' ')) {
|
|
$sql['parser']['start'] = 1;
|
|
$sql['parser']['end'] = 1;
|
|
}
|
|
if (0 == $sql['parser']['start'] && is_object($v)) {
|
|
$sql['parser']['start'] = 1;
|
|
$sql['parser']['end'] = 1;
|
|
}
|
|
|
|
if ("'" == substr($v, 0, 1) && 0 == $sql['parser']['start']) {
|
|
$sql['parser']['start'] = 1;
|
|
if (1 == strlen($v)) {
|
|
$first = 1;
|
|
}
|
|
$DELIMITER = "'";
|
|
}
|
|
if ('"' == substr($v, 0, 1) && 0 == $sql['parser']['start']) {
|
|
$sql['parser']['start'] = 1;
|
|
if (1 == strlen($v)) {
|
|
$first = 1;
|
|
}
|
|
$DELIMITER = '"';
|
|
}
|
|
if (1 == $sql['parser']['start'] && 1 != $sql['parser']['end'] && 0 == $first) {
|
|
if (substr($v, -1) == $DELIMITER) {
|
|
$B_Delimiter = ("'" == $DELIMITER) ? $B_Ticks : $B_Dashes;
|
|
//ist Delimiter maskiert?
|
|
if (($B_Esc % 2) == 1 && ($B_Delimiter % 2) == 1 && strlen($v) > 2) {
|
|
$sql['parser']['end'] = 1;
|
|
} elseif (($B_Delimiter % 2) == 1 && strlen($v) > 2) {
|
|
//ist mit `'` maskiert
|
|
$sql['parser']['end'] = 0;
|
|
} elseif (($B_Esc % 2) == 1) {
|
|
//ist mit Backslash maskiert
|
|
$sql['parser']['end'] = 0;
|
|
} else {
|
|
$sql['parser']['end'] = 1;
|
|
}
|
|
}
|
|
}
|
|
if (1 == $debug) {
|
|
echo "<font color='#0000FF'>".$sql['parser']['start'].'/'.$sql['parser']['end']."</font> Feld $i: ".htmlspecialchars($tb[$i]).'<font color=#008000>- '.$sql['parser']['sqlparts']." ($B_Ticks / $B_Esc)</font><br>";
|
|
}
|
|
if (1 == $sql['parser']['start'] && 1 == $sql['parser']['end']) {
|
|
++$sql['parser']['sqlparts'];
|
|
$sql['parser']['start'] = $sql['parser']['end'] = 0;
|
|
}
|
|
}
|
|
}
|
|
return $s;
|
|
}
|
|
|
|
function SQLOutput($sqlcommand, $meldung = '')
|
|
{
|
|
global $sql, $lang;
|
|
$s = '<h6 align="center">'.$lang['L_SQL_OUTPUT'].'</h6><div id="sqloutbox"><strong>';
|
|
if ('' != $meldung) {
|
|
$s .= trim($meldung);
|
|
}
|
|
|
|
if (isset($sql['parser']['sql_commands'])) {
|
|
$s .= ' '.$sql['parser']['sql_commands'].'</strong>'.$lang['L_SQL_COMMANDS_IN'].round($sql['parser']['time_used'], 4).$lang['L_SQL_COMMANDS_IN2'].'<br><br>';
|
|
$s .= $lang['L_SQL_OUT1'].'<strong>'.$sql['parser']['drop'].'</strong> <span style="color:#990099;font-weight:bold;">DROP</span>-, ';
|
|
$s .= '<strong>'.$sql['parser']['create'].'</strong> <span style="color:#990099;font-weight:bold;">CREATE</span>-, ';
|
|
$s .= '<strong>'.$sql['parser']['insert'].'</strong> <span style="color:#990099;font-weight:bold;">INSERT</span>-, ';
|
|
$s .= '<strong>'.$sql['parser']['update'].'</strong> <span style="color:#990099;font-weight:bold;">UPDATE</span>-'.$lang['L_SQL_OUT2'].'<br>';
|
|
$s .= $lang['L_SQL_OUT3'].'<strong>'.$sql['parser']['comment'].'</strong> '.$lang['L_SQL_OUT4'].'<br>';
|
|
if ($sql['parser']['sql_commands'] < 50) {
|
|
$s .= '<pre>'.Highlight_SQL($sqlcommand).'</pre>';
|
|
} else {
|
|
$s .= $lang['L_SQL_OUT5'];
|
|
}
|
|
} elseif ('' != $sqlcommand) {
|
|
$s .= '<h5 align="center">'.$lang['L_SQL_OUTPUT'].'</h5><pre>'.Highlight_SQL($sqlcommand).'</pre>';
|
|
}
|
|
return $s.'</div>';
|
|
}
|
|
|
|
function GetCreateTable($db, $tabelle)
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$res = mysqli_query($config['dbconnection'], "SHOW CREATE TABLE `$db`.`$tabelle`");
|
|
if ($res) {
|
|
$row = mysqli_fetch_array($res);
|
|
if (isset($row['Create Table'])) {
|
|
return $row['Create Table'];
|
|
} elseif (isset($row['Create View'])) {
|
|
return $row['Create View'];
|
|
} else {
|
|
return false;
|
|
}
|
|
} else {
|
|
return mysqli_error($config['dbconnection']);
|
|
}
|
|
}
|
|
|
|
function KindSQL($sql)
|
|
{
|
|
if (preg_match('@^((-- |#)[^\n]*\n|/\*.*?\*/)*(DROP|CREATE)[[:space:]]+(IF EXISTS[[:space:]]+)?(TABLE|DATABASE)[[:space:]]+(.+)@im', $sql)) {
|
|
return 2;
|
|
} elseif (preg_match('@^((-- |#)[^\n]*\n|/\*.*?\*/)*(DROP|CREATE)[[:space:]]+(IF EXISTS[[:space:]]+)?(TABLE|DATABASE)[[:space:]]+(.+)@im', $sql)) {
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
function GetPostParams()
|
|
{
|
|
global $db, $dbid, $tablename, $context, $limitstart, $order, $orderdir, $sql;
|
|
$db = $_POST['db'];
|
|
$dbid = $_POST['dbid'];
|
|
$tablename = $_POST['tablename'];
|
|
$context = $_POST['context'];
|
|
$limitstart = $_POST['limitstart'];
|
|
$order = $_POST['order'];
|
|
$orderdir = $_POST['orderdir'];
|
|
$sql['sql_statement'] = (isset($_POST['sql_statement'])) ? $_POST['sql_statement'] : "SELECT * FROM `$tablename`";
|
|
}
|
|
|
|
// when fieldnames contain spaces or dots they are replaced with underscores
|
|
// we need to built the same index to get the postet values for inserts and updates
|
|
function correct_post_index($index)
|
|
{
|
|
$index = str_replace(' ', '_', $index);
|
|
$index = str_replace('.', '_', $index);
|
|
return $index;
|
|
}
|
|
function ComboCommandDump($when, $index, $disabled = '')
|
|
{
|
|
global $SQL_ARRAY, $nl, $databases, $lang;
|
|
if ((is_array($SQL_ARRAY) && 0 == count($SQL_ARRAY)) || !is_array($SQL_ARRAY)) {
|
|
$r = '<a href="sql.php?context=1" class="uls">'.$lang['L_SQL_BEFEHLE'].'</a>';
|
|
if (0 == $when) {
|
|
$r .= '<input type="hidden" name="command_before_'.$index.'" value="">';
|
|
} else {
|
|
$r .= '<input type="hidden" name="command_after_'.$index.'" value="">';
|
|
}
|
|
} else {
|
|
if (0 == $when) {
|
|
$r = '<select class="SQLCombo" name="command_before_'.$index.'"'
|
|
.$disabled.'>';
|
|
$csql = $databases['command_before_dump'][$index];
|
|
} else {
|
|
$r = '<select class="SQLCombo" name="command_after_'.$index.'"'
|
|
.$disabled.'>';
|
|
$csql = $databases['command_after_dump'][$index];
|
|
}
|
|
|
|
$r .= '<option value="" '.(('' == $csql) ? ' selected="selected"' : '').'> </option>'."\n";
|
|
if (is_array($SQL_ARRAY) && count($SQL_ARRAY) > 0) {
|
|
for ($i = 0; $i < count($SQL_ARRAY); ++$i) {
|
|
$s = trim(SQL_String($i));
|
|
$r .= '<option value="'.htmlspecialchars($s).'" '.(($csql == $s) ? ' selected="selected"' : '').'>'.SQL_Name($i).'</option>'."\n";
|
|
}
|
|
}
|
|
$r .= '</select>';
|
|
}
|
|
return $r;
|
|
}
|
|
|
|
function EngineCombo($default = '')
|
|
{
|
|
global $config;
|
|
if (!$config['dbconnection']) {
|
|
mod_mysqli_connect();
|
|
}
|
|
|
|
$r = '<option value="" '.(('' == $default) ? ' selected="selected"' : '').'></option>';
|
|
if (!MOD_NEW_VERSION) {
|
|
//BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM
|
|
$r .= '<option value="BDB" '.(('BDB' == $default) ? ' selected="selected"' : '').'>BDB</option>';
|
|
$r .= '<option value="HEAP" '.(('HEAP' == $default) ? ' selected="selected"' : '').'>HEAP</option>';
|
|
$r .= '<option value="ISAM" '.(('ISAM' == $default) ? ' selected="selected"' : '').'>ISAM</option>';
|
|
$r .= '<option value="InnoDB" '.(('InnoDB' == $default) ? ' selected="selected"' : '').'>InnoDB</option>';
|
|
$r .= '<option value="MERGE" '.(('MERGE' == $default) ? ' selected="selected"' : '').'>MERGE</option>';
|
|
$r .= '<option value="MRG_MYISAM" '.(('MRG_MYISAM' == $default) ? ' selected="selected"' : '').'>MRG_MYISAM</option>';
|
|
$r .= '<option value="MYISAM" '.(('MyISAM' == $default) ? ' selected="selected"' : '').'>MyISAM</option>';
|
|
} else {
|
|
$res = mysqli_query($config['dbconnection'], 'SHOW ENGINES');
|
|
$num = mysqli_num_rows($res);
|
|
for ($i = 0; $i < $num; ++$i) {
|
|
$row = mysqli_fetch_array($res);
|
|
$r .= '<option value="'.$row['Engine'].'" '.(($row['Engine'] == $default) ? ' selected="selected"' : '').'>'.$row['Engine'].'</option>';
|
|
}
|
|
}
|
|
return $r;
|
|
}
|
|
|
|
function CharsetCombo($default = '')
|
|
{
|
|
global $config;
|
|
if (!MOD_NEW_VERSION) {
|
|
return '';
|
|
} else {
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
$res = mysqli_query($config['dbconnection'], 'SHOW Charset');
|
|
$num = mysqli_num_rows($res);
|
|
$r = '<option value="" '.(('' == $default) ? ' selected="selected"' : '').'></option>';
|
|
$charsets = [];
|
|
for ($i = 0; $i < $num; ++$i) {
|
|
$charsets[] = mysqli_fetch_array($res);
|
|
}
|
|
|
|
if (is_array($charsets)) {
|
|
$charsets = mu_sort($charsets, 'Charset');
|
|
foreach ($charsets as $row) {
|
|
$r .= '<option value="'.$row['Charset'].'" '.(($row['Charset'] == $default) ? ' selected="selected"' : '').'>'.$row['Charset'].'</option>';
|
|
}
|
|
}
|
|
return $r;
|
|
}
|
|
}
|
|
|
|
function GetCollationArray()
|
|
{
|
|
global $config;
|
|
if (!isset($config['dbconnection'])) {
|
|
mod_mysqli_connect();
|
|
}
|
|
|
|
$res = mysqli_query($config['dbconnection'], 'SHOW Collation');
|
|
$num = mysqli_num_rows($res);
|
|
$r = [];
|
|
if (is_array($r)) {
|
|
for ($i = 0; $i < $num; ++$i) {
|
|
$row = mysqli_fetch_array($res);
|
|
$r[$i]['Collation'] = isset($row['Collation']) ? $row['Collation'] : '';
|
|
$r[$i]['Charset'] = isset($row['Charset']) ? $row['Charset'] : '';
|
|
$r[$i]['Id'] = isset($row['Id']) ? $row['Id'] : '';
|
|
$r[$i]['Default'] = isset($row['Default']) ? $row['Default'] : '';
|
|
$r[$i]['Compiled'] = isset($row['Compiled']) ? $row['Compiled'] : '';
|
|
$r[$i]['Sortlen'] = isset($row['Sortlen']) ? $row['Sortlen'] : '';
|
|
}
|
|
}
|
|
return $r;
|
|
}
|
|
|
|
function CollationCombo($default = '', $withcharset = 0)
|
|
{
|
|
if (!MOD_NEW_VERSION) {
|
|
return '';
|
|
} else {
|
|
$r = GetCollationArray();
|
|
sort($r);
|
|
$s = '';
|
|
$s = '<option value=""'.(('' == $default) ? ' selected="selected"' : '').'></option>';
|
|
$group = '';
|
|
for ($i = 0; $i < count($r); ++$i) {
|
|
$gc = $r[$i]['Charset'];
|
|
if ($gc != $group) {
|
|
$group = $gc;
|
|
if ($i > 0) {
|
|
$s .= '</optgroup>';
|
|
}
|
|
$s .= '<optgroup label="'.$group.'">';
|
|
}
|
|
$s .= '<option value="'.((1 == $withcharset) ? $group.'|' : '').$r[$i]['Collation'].'" '.(($r[$i]['Collation'] == $default) ? 'selected' : '').'>'.$r[$i]['Collation'].'</option>';
|
|
}
|
|
return $s.'</optgroup>';
|
|
}
|
|
}
|
|
|
|
function AttributeCombo($default = '')
|
|
{
|
|
$s = '<option value=""'.(('' == $default) ? ' selected="selected"' : '').'></option>';
|
|
$s .= '<option value="unsigned" '.(('unsigned' == $default) ? ' selected="selected"' : '').'>unsigned</option>';
|
|
$s .= '<option value="unsigned zerofill"'.(('unsigned zerofill' == $default) ? ' selected="selected"' : '').'>unsigned zerofill</option>';
|
|
return $s;
|
|
}
|
|
|
|
function simple_bbcode_conversion($a)
|
|
{
|
|
global $config;
|
|
$tag_start = '';
|
|
$tag_end = '';
|
|
|
|
//replacements
|
|
$a = nl2br($a);
|
|
$a = str_replace('<br>', ' <br>', $a);
|
|
$a = str_replace('<br />', ' <br>', $a);
|
|
|
|
$a = preg_replace("/\[url=(.*?)\](.*?)\[\/url\]/si", '<a class="small" href="$1" target="blank">$2</a>', $a);
|
|
$a = preg_replace("/\[urltargetself=(.*?)\](.*?)\[\/urltargetself\]/si", '<a class="small" href="$1" target="blank">$2</a>', $a);
|
|
$a = preg_replace("/\[url\](.*?)\[\/url\]/si", '<a class="small" href="$1" target="blank">$1</a>', $a);
|
|
$a = preg_replace("/\[ed2k=\+(.*?)\](.*?)\[\/ed2k\]/si", '<a class="small" href="$1" target="blank">$2</a>', $a);
|
|
$a = preg_replace("/\[ed2k=(.*?)\](.*?)\[\/ed2k\]/si", '<a class="small" href="$1" target="blank">$2</a>', $a);
|
|
|
|
$a = preg_replace("/\[center\](.*?)\[\/center\]/si", '<div align="center">$1</div>', $a);
|
|
$a = preg_replace("/\[size=([1-2]?[0-9])\](.*?)\[\/size\]/si", '<span style="font-size= $1px;">$2</span>', $a);
|
|
$a = preg_replace("/\[size=([1-2]?[0-9]):(.*?)\](.*?)\[\/size(.*?)\]/si", '<span style="font-size= $1px;">$3</span>', $a);
|
|
$a = preg_replace("/\[font=(.*?)\](.*?)\[\/font\]/si", '<span style="font-family:$1;">$2</span>', $a);
|
|
$a = preg_replace("/\[color=(.*?)\](.*?)\[\/color\]/si", '<span style="color= $1;">$2</span>', $a);
|
|
$a = preg_replace("/\[color=(.*?):(.*?)\](.*?)\[\/color(.*?)\]/si", '<span style="color= $1;">$3</span>', $a);
|
|
$a = preg_replace("/\[img\](.*?)\[\/img\]/si", '<img src="$1" vspace=4 hspace=4>', $a);
|
|
//$a=preg_replace("/\[b\](.*?)\[\/b\]/si", "<strong>$1</strong>", $a);
|
|
$a = preg_replace("/\[b(.*?)\](.*?)\[\/b(.*?)\]/si", '<strong>$2</strong>', $a);
|
|
//$a=preg_replace("/\[u\](.*?)\[\/u\]/si", "<u>$1</u>", $a);
|
|
$a = preg_replace("/\[u(.*?)\](.*?)\[\/u(.*?)\]/si", '<u>$2</u>', $a);
|
|
//$a=preg_replace("/\[i\](.*?)\[\/i\]/si", "<em>$1</em>", $a);
|
|
$a = preg_replace("/\[i(.*?)\](.*?)\[\/i(.*?)\]/si", '<em>$2</em>', $a);
|
|
//$a=preg_replace("/\[quote\](.*?)\[\/quote\]/si", "<p align=\"left\" style=\"border: 2px solid silver;padding:4px;\">$1</p>", $a);
|
|
$a = preg_replace("/\[quote(.*?)\](.*?)\[\/quote(.*?)\]/si", '<p align="left" style="border: 2px solid silver;padding:4px;">$2</p>', $a);
|
|
$a = preg_replace("/\[code(.*?)\](.*?)\[\/code(.*?)\]/si", '<p align="left" style="border: 2px solid red;color:green;padding:4px;">$2</p>', $a);
|
|
$a = preg_replace("/\[hide\](.*?)\[\/hide\]/si", '<div style="background-color:#ccffcc;">$1</div>', $a);
|
|
$a = preg_replace("/(^|\s)+((http:\/\/)|(www.))(.+)(\s|$)+/Uis", ' <a href="http://$4$5" target="_blank">http://$4$5</a> ', $a);
|
|
return $tag_start.$a.$tag_end;
|
|
}
|
|
|
|
function ExtractTablenameFromSQL($q)
|
|
{
|
|
global $databases, $db, $dbid;
|
|
$tablename = '';
|
|
if (strlen($q) > 100) {
|
|
$q = substr($q, 0, 100);
|
|
}
|
|
$p = trim($q);
|
|
// if we get a list of tables - no current table is selected -> return ''
|
|
if ('SHOW TABLE STATUS' == strtoupper(substr($p, 0, 17))) {
|
|
return '';
|
|
}
|
|
// check for SELECT-Statement to extract tablename after FROM
|
|
if ('SELECT ' == strtoupper(substr($p, 0, 7))) {
|
|
$parts = [];
|
|
$p = substr($p, strpos(strtoupper($p), 'FROM') + 5);
|
|
$parts = explode(' ', $p);
|
|
$p = $parts[0];
|
|
}
|
|
// remove keyword DATABASES and the database name after that
|
|
$p = preg_replace('/DATABASE [`]*\w+[`]*/i', '', $p);
|
|
// remove other keywords
|
|
$suchen = [
|
|
'SHOW DATABASES',
|
|
'SHOW ',
|
|
'SELECT',
|
|
'DROP',
|
|
'INSERT',
|
|
'UPDATE',
|
|
'DELETE',
|
|
'CREATE',
|
|
'TABLE',
|
|
'STATUS',
|
|
'FROM',
|
|
'*',
|
|
];
|
|
$ersetzen = [
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
'',
|
|
];
|
|
$cleaned = trim(str_ireplace($suchen, $ersetzen, $p));
|
|
$tablename = $cleaned;
|
|
if (strpos($cleaned, ' ')) {
|
|
$tablename = substr($cleaned, 0, strpos($cleaned, ' '));
|
|
}
|
|
$tablename = str_replace('`', '', $tablename); // remove backticks
|
|
// take care of db-name.tablename
|
|
if (strpos($tablename, '.')) {
|
|
$p = explode('.', $tablename);
|
|
$databases['db_actual'] = $p[0];
|
|
// if database is changed in Query we need to get the index of the actual db
|
|
$db_temp = array_flip($databases['Name']);
|
|
if (isset($db_temp[$databases['db_actual']])) {
|
|
$databases['db_selected_index'] = $db_temp[$databases['db_actual']];
|
|
$dbid = $databases['db_selected_index'];
|
|
}
|
|
if (isset($_GET['tablename'])) {
|
|
unset($_GET['tablename']);
|
|
}
|
|
//echo "<br>" . $db;
|
|
$tablename = $p[1];
|
|
}
|
|
// if (Table_Exists($databases['db_actual'], $tablename)) return $tablename;
|
|
// else return '';
|
|
return $tablename;
|
|
}
|
|
|
|
function GetOptionsCombo($arr, $default)
|
|
{
|
|
global $feldtypen, $feldattribute, $feldnull, $feldextras, $feldkeys, $feldrowformat;
|
|
$r = '';
|
|
foreach ($arr as $s) {
|
|
$r .= '<option value="'.$s.'" '.((strtoupper($default) == strtoupper($s)) ? ' selected="selected"' : '').'>'.$s.'</option>'."\n";
|
|
}
|
|
return $r;
|
|
}
|
|
|
|
function make_options($arr, $selected)
|
|
{
|
|
$r = '';
|
|
foreach ($arr as $key => $val) {
|
|
$r .= '<option value="'.$key.'"';
|
|
if ($key == $selected) {
|
|
$r .= ' selected';
|
|
}
|
|
$r .= '>'.$val.'</option>'."\n";
|
|
}
|
|
return $r;
|
|
}
|
|
|
|
/**
|
|
* Reads MySQL field information (depricated: will be substituted by function getExtendedFieldInfos).
|
|
*
|
|
* Reads field information for each field of a MySQL table
|
|
* and fills an array with the keys detected
|
|
*
|
|
* @param $db
|
|
* @param $tabelle
|
|
*
|
|
* @return array
|
|
*/
|
|
function getFieldinfos($db, $tabelle)
|
|
{
|
|
global $config;
|
|
$fields_infos = [];
|
|
$t = GetCreateTable($db, $tabelle);
|
|
$sqlf = "SHOW FULL FIELDS FROM `$db`.`$tabelle`;";
|
|
$res = mod_query($sqlf);
|
|
$anz_fields = mysqli_num_rows($res);
|
|
|
|
$fields_infos['_primarykeys_'] = [];
|
|
$fields_infos['_key_'] = [];
|
|
$fields_infos['_uniquekey_'] = [];
|
|
$fields_infos['_fulltextkey_'] = [];
|
|
|
|
$fields_infos['_tableinfo_'] = [
|
|
'ENGINE' => 'MyISAM',
|
|
'AUTO_INCREMENT' => '',
|
|
'DEFAULT CHARSET' => '',
|
|
];
|
|
|
|
for ($i = 0; $i < $anz_fields; ++$i) {
|
|
// define defaults
|
|
$fields_infos[$i]['name'] = '';
|
|
$fields_infos[$i]['size'] = '';
|
|
$fields_infos[$i]['default'] = '';
|
|
$fields_infos[$i]['extra'] = '';
|
|
$fields_infos[$i]['attributes'] = '';
|
|
$fields_infos[$i]['null'] = '';
|
|
$fields_infos[$i]['collate'] = '';
|
|
$fields_infos[$i]['comment'] = '';
|
|
$fields_infos[$i]['type'] = '';
|
|
$fields_infos[$i]['privileges'] = '';
|
|
|
|
$row = mysqli_fetch_array($res, MYSQLI_ASSOC);
|
|
//v($row);
|
|
if (isset($row['Collation'])) {
|
|
$fields_infos[$i]['collate'] = $row['Collation'];
|
|
}
|
|
if (isset($row['COLLATE'])) {
|
|
$fields_infos[$i]['collate'] = $row['COLLATE'];
|
|
} // MySQL <4.1
|
|
if (isset($row['Comment'])) {
|
|
$fields_infos[$i]['comment'] = $row['Comment'];
|
|
}
|
|
if (isset($row['Type'])) {
|
|
$fields_infos[$i]['type'] = $row['Type'];
|
|
}
|
|
if (isset($row['Field'])) {
|
|
$fields_infos[$i]['name'] = $row['Field'];
|
|
}
|
|
$fields_infos[$i]['size'] = get_attribut_size_from_type($fields_infos[$i]['type']);
|
|
// remove size from type for readability in output
|
|
$fields_infos[$i]['type'] = str_replace('('.$fields_infos[$i]['size'].')', '', $fields_infos[$i]['type']);
|
|
// look for attributes, everthing behind the first space is an atribut
|
|
$attributes = explode(' ', $fields_infos[$i]['type'], 2);
|
|
if (isset($attributes[1])) {
|
|
// we found attributes
|
|
unset($attributes[0]); // delete type
|
|
$fields_infos[$i]['attributes'] = trim(implode(' ', $attributes)); //merge all other attributes
|
|
// remove attributes from type
|
|
$fields_infos[$i]['type'] = trim(str_replace($fields_infos[$i]['attributes'], '', $fields_infos[$i]['type']));
|
|
}
|
|
if (isset($row['NULL'])) {
|
|
$fields_infos[$i]['null'] = $row['NULL'];
|
|
}
|
|
if (isset($row['Null'])) {
|
|
$fields_infos[$i]['null'] = $row['Null'];
|
|
}
|
|
if (isset($row['Default'])) {
|
|
$fields_infos[$i]['default'] = $row['Default'];
|
|
}
|
|
if (isset($row['Extra'])) {
|
|
$fields_infos[$i]['extra'] = $row['Extra'];
|
|
}
|
|
if (isset($row['Privileges'])) {
|
|
$fields_infos[$i]['privileges'] = $row['Privileges'];
|
|
}
|
|
if (isset($row['privileges'])) {
|
|
$fields_infos[$i]['privileges'] = $row['privileges'];
|
|
}
|
|
}
|
|
|
|
// now get key definitions of the table and add info to fields
|
|
$sql = 'SHOW KEYS FROM `'.$db.'`.`'.$tabelle.'`';
|
|
$res = mod_query($sql);
|
|
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
|
|
//v($row);
|
|
$key_name = isset($row['Key_name']) ? $row['Key_name'] : '';
|
|
$index_type = isset($row['Index_type']) ? $row['Index_type'] : '';
|
|
$column_name = isset($row['Column_name']) ? $row['Column_name'] : '';
|
|
$non_unique = isset($row['Non_unique']) ? $row['Non_unique'] : '';
|
|
if ($column_name > '') {
|
|
// first find indexnr of field
|
|
for ($index = 0, $count = sizeof($fields_infos); $index < $count; ++$index) {
|
|
if ($fields_infos[$index]['name'] == $column_name) {
|
|
break;
|
|
}
|
|
}
|
|
if ('PRIMARY' == $key_name) {
|
|
$fields_infos['_primarykeys_'][] = $column_name;
|
|
} elseif ('FULLTEXT' == $index_type) {
|
|
$fields_infos['_fulltextkey_'][] = $column_name;
|
|
} elseif (0 == $non_unique) {
|
|
$fields_infos['_uniquekey_'][] = $column_name;
|
|
} else {
|
|
$fields_infos['_key_'][] = $column_name;
|
|
}
|
|
}
|
|
}
|
|
//v($fields_infos);
|
|
return $fields_infos;
|
|
}
|
|
|
|
/**
|
|
* Reads extened MySQL field information.
|
|
*
|
|
* Reads extened field information for each field of a MySQL table
|
|
* and fills an array like
|
|
* array(
|
|
* [Fieldname][attribut] =value,
|
|
* ['primary_key'] =keys
|
|
* )
|
|
*
|
|
* @param $db
|
|
* @param $table
|
|
*
|
|
* @return array Field infos
|
|
*/
|
|
function getExtendedFieldInfo($db, $table)
|
|
{
|
|
global $config;
|
|
$fields_infos = [];
|
|
$t = GetCreateTable($db, $table);
|
|
$sqlf = "SHOW FULL FIELDS FROM `$db`.`$table`;";
|
|
$res = mod_query($sqlf);
|
|
$num_fields = mysqli_num_rows($res);
|
|
|
|
$f = []; //will hold all info
|
|
for ($x = 0; $x < $num_fields; ++$x) {
|
|
$row = mysqli_fetch_array($res, MYSQLI_ASSOC);
|
|
//v($row);
|
|
$i = $row['Field']; // define name of field as index of array
|
|
//define field defaults - this way the index of the array is defined anyway
|
|
$f[$i]['field'] = '';
|
|
$f[$i]['collation'] = '';
|
|
$f[$i]['comment'] = '';
|
|
$f[$i]['type'] = '';
|
|
$f[$i]['size'] = '';
|
|
$f[$i]['attributes'] = '';
|
|
$f[$i]['null'] = '';
|
|
$f[$i]['default'] = '';
|
|
$f[$i]['extra'] = '';
|
|
$f[$i]['privileges'] = '';
|
|
$f[$i]['primary_keys'] = [];
|
|
|
|
if (isset($row['Collation'])) {
|
|
$f[$i]['collate'] = $row['Collation'];
|
|
}
|
|
if (isset($row['COLLATE'])) {
|
|
$f[$i]['collate'] = $row['COLLATE'];
|
|
} // MySQL <4.1
|
|
if (isset($row['Comment'])) {
|
|
$f[$i]['comment'] = $row['Comment'];
|
|
}
|
|
if (isset($row['Type'])) {
|
|
$f[$i]['type'] = $row['Type'];
|
|
}
|
|
if (isset($row['Field'])) {
|
|
$f[$i]['field'] = $row['Field'];
|
|
}
|
|
$f[$i]['size'] = get_attribut_size_from_type($f[$i]['type']);
|
|
// remove size from type for readability in output
|
|
$f[$i]['type'] = str_replace('('.$f[$i]['size'].')', '', $f[$i]['type']);
|
|
// look for attributes, everthing behind the first space is an atribut
|
|
$attributes = explode(' ', $f[$i]['type'], 2);
|
|
if (isset($attributes[1])) {
|
|
// we found attributes
|
|
unset($attributes[0]); // delete type
|
|
$f[$i]['attributes'] = trim(implode(' ', $attributes)); //merge all other attributes
|
|
// remove attributes from type
|
|
$f[$i]['type'] = trim(str_replace($f[$i]['attributes'], '', $f[$i]['type']));
|
|
}
|
|
if (isset($row['NULL'])) {
|
|
$f[$i]['null'] = $row['NULL'];
|
|
}
|
|
if (isset($row['Null'])) {
|
|
$f[$i]['null'] = $row['Null'];
|
|
}
|
|
if (isset($row['Default'])) {
|
|
$f[$i]['default'] = $row['Default'];
|
|
}
|
|
if (isset($row['Extra'])) {
|
|
$f[$i]['extra'] = $row['Extra'];
|
|
}
|
|
if (isset($row['Privileges'])) {
|
|
$f[$i]['privileges'] = $row['Privileges'];
|
|
}
|
|
if (isset($row['privileges'])) {
|
|
$f[$i]['privileges'] = $row['privileges'];
|
|
}
|
|
}
|
|
|
|
// now get key definitions of the table and add info to field-array
|
|
$sql = 'SHOW KEYS FROM `'.$db.'`.`'.$table.'`';
|
|
$res = mod_query($sql);
|
|
while ($row = mysqli_fetch_array($res, MYSQLI_ASSOC)) {
|
|
//echo "<br>Keys of $table: ";v($row);
|
|
$key_name = isset($row['Key_name']) ? $row['Key_name'] : '';
|
|
$index_type = isset($row['Index_type']) ? $row['Index_type'] : '';
|
|
$column_name = isset($row['Column_name']) ? $row['Column_name'] : '';
|
|
// to do: add other info about index etc.
|
|
if ('PRIMARY' == $key_name) {
|
|
$f['primary_keys'][] = $column_name;
|
|
}
|
|
}
|
|
return $f;
|
|
}
|
|
|
|
function ChangeKeys($ok, $nk, $fld, $size, $restriction = '')
|
|
{
|
|
if ($ok[0] == $nk[0] && $ok[1] == $nk[1] && $ok[2] == $nk[2] && $ok[3] == $nk[3]) {
|
|
return '';
|
|
} else {
|
|
$s = '';
|
|
if (0 == $ok[0] && 1 == $nk[0]) {
|
|
if ('drop_only' != $restriction) {
|
|
$s .= "ADD PRIMARY KEY (`$fld`), ";
|
|
}
|
|
} elseif (1 == $ok[0] && 0 == $nk[0]) {
|
|
$s .= 'DROP PRIMARY KEY, ';
|
|
}
|
|
if (0 == $ok[1] && 1 == $nk[1]) {
|
|
if ('drop_only' != $restriction) {
|
|
$s .= "ADD UNIQUE INDEX `$fld` (`$fld`), ";
|
|
}
|
|
} elseif (1 == $ok[1] && 0 == $nk[1]) {
|
|
$s .= "DROP INDEX `$fld`, ";
|
|
}
|
|
if (0 == $ok[2] && 1 == $nk[2]) {
|
|
if ('drop_only' != $restriction) {
|
|
$s .= "ADD INDEX `$fld` (`$fld`), ";
|
|
}
|
|
} elseif (1 == $ok[2] && 0 == $nk[2]) {
|
|
$s .= "DROP INDEX `$fld`, ";
|
|
}
|
|
if (0 == $ok[3] && 1 == $nk[3]) {
|
|
if ('drop_only' != $restriction) {
|
|
$s .= "ADD FULLTEXT INDEX `$fld` (`$fld`($size)), ";
|
|
}
|
|
} elseif (1 == $ok[3] && 0 == $nk[3]) {
|
|
$s .= "DROP FULLTEXT INDEX `$fld`, ";
|
|
}
|
|
}
|
|
if ('' != $s) {
|
|
$s = substr($s, 0, strlen($s) - 2);
|
|
}
|
|
return $s;
|
|
}
|
|
|
|
function build_where_from_record($data)
|
|
{
|
|
if (!is_array($data)) {
|
|
return false;
|
|
}
|
|
$ret = '';
|
|
foreach ($data as $key => $val) {
|
|
if (is_string($val)) {
|
|
$val = str_replace('<span class="treffer">', '', $val);
|
|
$val = str_replace('</span>', '', $val);
|
|
}
|
|
$nLen = strlen($val);
|
|
if (!empty($val) && ($nLen < 200)) {
|
|
$ret .= '`'.$key.'`="'.addslashes($val).'" AND ';
|
|
}
|
|
}
|
|
$ret = substr($ret, 0, -5);
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/*
|
|
* Array mit Primaerschluesseln aufbauen
|
|
* INPUT: Datenbank.Tabelle (oder nur Tabelle)
|
|
* OUTPUT: Array mit allen Tabellenschluesseln
|
|
* Author: DH
|
|
*/
|
|
function getPrimaryKeys($db, $table)
|
|
{
|
|
$keys = [];
|
|
$sqlk = 'SHOW KEYS FROM `'.$db.'`.`'.$table.'`;';
|
|
$res = mod_query($sqlk);
|
|
while ($row = mysqli_fetch_array($res)) {
|
|
//wenn Primaerschluessel
|
|
if ('PRIMARY' == $row['Key_name']) {
|
|
$keys['name'][] = $row['Column_name'];
|
|
}
|
|
if (null != $row['Sub_part']) {
|
|
$keys['size'][] = $row['Sub_part'];
|
|
} else {
|
|
$keys['size'][] = '';
|
|
}
|
|
}
|
|
|
|
return $keys;
|
|
}
|
|
|
|
/*
|
|
* Array mit allen Feldern aufbauen
|
|
* INPUT: Datenbank.Tabelle
|
|
* OUTPUT: Array mit allen Feldern der Tabelle
|
|
* Author: DH
|
|
*/
|
|
function getAllFields($db, $table)
|
|
{
|
|
$fields = [];
|
|
$sqlk = 'DESCRIBE `'.$db.'`.`'.$table.'`;';
|
|
$res = mod_query($sqlk);
|
|
while ($row = mysqli_fetch_array($res)) {
|
|
$fields[] = $row['Field'];
|
|
}
|
|
return $fields;
|
|
}
|
|
|
|
/*
|
|
* Alte Primaerschluessel verwerfen, neue Primaerschluessel setzen
|
|
* INPUT: Datenbank.Tabelle, Array mit neuen Primaerschluesseln
|
|
* OUTPUT: true/false
|
|
* Author: DH
|
|
*/
|
|
function setNewPrimaryKeys($db, $table, $newKeys, $indexSizes)
|
|
{
|
|
$sqlSetNewPrimaryKeys = 'ALTER TABLE `'.$db.'`.`'.$table.'`';
|
|
//wenn es Primaerschluessel gibt, diese loeschen
|
|
$existingKeys = getPrimaryKeys($db, $table);
|
|
if (count($existingKeys) > 0) {
|
|
$sqlSetNewPrimaryKeys .= ' DROP PRIMARY KEY';
|
|
}
|
|
//wenn min. 1 Schluessel im Array, sonst nur loeschen
|
|
if (count($newKeys) > 0) {
|
|
if (count($existingKeys) > 0) {
|
|
$sqlSetNewPrimaryKeys .= ', ';
|
|
}
|
|
$sqlSetNewPrimaryKeys .= ' ADD PRIMARY KEY (';
|
|
foreach ($newKeys as $id => $name) {
|
|
if ($id > 0) {
|
|
$sqlSetNewPrimaryKeys .= ', ';
|
|
}
|
|
$sqlSetNewPrimaryKeys .= '`'.$name.'`';
|
|
if ($indexSizes[$id]) {
|
|
$sqlSetNewPrimaryKeys .= ' ('.$indexSizes[$id].')';
|
|
}
|
|
}
|
|
$sqlSetNewPrimaryKeys .= ')';
|
|
}
|
|
$sqlSetNewPrimaryKeys .= ';';
|
|
$res = mod_query($sqlSetNewPrimaryKeys);
|
|
return $res;
|
|
}
|
|
|
|
function setNewKeys($db, $table, $newKeys, $indexType, $indexName, $indexSizes)
|
|
{
|
|
$sqlSetNewKeys = 'ALTER TABLE `'.$db.'`.`'.$table.'` ';
|
|
$sqlSetNewKeys .= 'ADD '.$indexType.' ';
|
|
if ($indexName) {
|
|
$sqlSetNewKeys .= '`'.$indexName.'` ';
|
|
}
|
|
$sqlSetNewKeys .= '(';
|
|
foreach ($newKeys as $id => $name) {
|
|
if ($id > 0) {
|
|
$sqlSetNewKeys .= ', ';
|
|
}
|
|
$sqlSetNewKeys .= '`'.$name.'`';
|
|
if ($indexSizes[$id]) {
|
|
$sqlSetNewKeys .= ' ('.$indexSizes[$id].')';
|
|
}
|
|
}
|
|
$sqlSetNewKeys .= ');';
|
|
$res = mod_query($sqlSetNewKeys);
|
|
return $res;
|
|
}
|
|
|
|
function killKey($db, $table, $indexName)
|
|
{
|
|
$sqlKillKey = 'ALTER TABLE `'.$db.'`.`'.$table.'` DROP INDEX `'.$indexName.'`';
|
|
$res = mod_query($sqlKillKey);
|
|
return $res;
|
|
}
|
|
|
|
function get_output_attribut_null($null)
|
|
{
|
|
global $lang;
|
|
if ('' == $null) {
|
|
return $lang['L_YES'];
|
|
}
|
|
$not_null = [
|
|
'NO',
|
|
'NOT NULL',
|
|
];
|
|
if (in_array($null, $not_null)) {
|
|
return $lang['L_NO'];
|
|
} else {
|
|
return $lang['L_YES'];
|
|
}
|
|
}
|
|
|
|
function get_attribut_size_from_type($type)
|
|
{
|
|
$size = '';
|
|
$matches = [];
|
|
$pattern = '/\((\d.*?)\)/msi';
|
|
preg_match($pattern, $type, $matches);
|
|
if (isset($matches[1])) {
|
|
$size = $matches[1];
|
|
}
|
|
return $size;
|
|
}
|
|
|
|
// Bildet die WHERE-Bedingung zur eindeutigen Identifizierung wenn kein Primaerschluessel vorhanden ist
|
|
// erwartet ein Array mit $data[feldname] =wert
|
|
function build_recordkey($data)
|
|
{
|
|
if (!is_array($data)) {
|
|
return urlencode($data);
|
|
} else {
|
|
return urlencode(serialize($data));
|
|
}
|
|
}
|