http://osalabs.com Light standalone PHP script for quick and easy access MySQL databases. http://phpminiadmin.sourceforge.net Dual licensed: GPL v2 and MIT, see texts at http://opensource.org/licenses/ */ $ACCESS_PWD=''; #!!!IMPORTANT!!! this is script access password, SET IT if you want to protect you DB from public access #DEFAULT db connection settings # --- WARNING! --- if you set defaults - it's recommended to set $ACCESS_PWD to protect your db! $DBDEF=array( 'user'=>"",#required 'pwd'=>"", #required 'db'=>"", #optional, default DB 'host'=>"",#optional 'port'=>"",#optional 'chset'=>"utf8",#optional, default charset ); file_exists($f=dirname(__FILE__) . '/phpminiconfig.php')&&require($f); // Read from config (easier to update) if (function_exists('date_default_timezone_set')) date_default_timezone_set('UTC');#required by PHP 5.1+ //constants $VERSION='1.9.160630'; $MAX_ROWS_PER_PAGE=50; #max number of rows in select per one page $D="\r\n"; #default delimiter for export $BOM=chr(239).chr(187).chr(191); $SHOW_D="SHOW DATABASES"; $SHOW_T="SHOW TABLE STATUS"; $DB=array(); #working copy for DB settings $self=$_SERVER['PHP_SELF']; session_set_cookie_params(0, null, null, false, true); session_start(); if (!isset($_SESSION['XSS'])) $_SESSION['XSS']=get_rand_str(16); $xurl='XSS='.$_SESSION['XSS']; ini_set('display_errors',0); #turn on to debug db or script issues error_reporting(E_ALL ^ E_NOTICE); //strip quotes if they set if (get_magic_quotes_gpc()){ $_COOKIE=array_map('killmq',$_COOKIE); $_REQUEST=array_map('killmq',$_REQUEST); } if ($_REQUEST['login']){ if ($_REQUEST['pwd']!=$ACCESS_PWD){ $err_msg="Invalid password. Try again"; }else{ $_SESSION['is_logged']=true; loadcfg(); } } if ($_REQUEST['logoff']){ check_xss(); $_SESSION = array(); savecfg(); session_destroy(); $url=$self; if (!$ACCESS_PWD) $url='/'; header("location: $url"); exit; } if (!$_SESSION['is_logged']){ if (!$ACCESS_PWD) { $_SESSION['is_logged']=true; loadcfg(); }else{ print_login(); exit; } } if ($_REQUEST['savecfg']){ check_xss(); savecfg(); } loadsess(); if ($_REQUEST['showcfg']){ print_cfg(); exit; } //get initial values $SQLq=trim(base64_decode($_REQUEST['q'])); $page=$_REQUEST['p']+0; if ($_REQUEST['refresh'] && $DB['db'] && preg_match('/^show/',$SQLq) ) $SQLq=$SHOW_T; if (db_connect('nodie')){ $time_start=microtime_float(); if ($_REQUEST['phpinfo']){ ob_start();phpinfo();$sqldr='
'.ob_get_clean().'
'; }else{ if ($DB['db']){ if ($_REQUEST['shex']){ print_export(); }elseif ($_REQUEST['doex']){ check_xss();do_export(); }elseif ($_REQUEST['shim']){ print_import(); }elseif ($_REQUEST['doim']){ check_xss();do_import(); }elseif ($_REQUEST['dosht']){ check_xss();do_sht(); }elseif (!$_REQUEST['refresh'] || preg_match('/^select|show|explain|desc/i',$SQLq) ){ if ($SQLq)check_xss(); do_sql($SQLq);#perform non-select SQL only if not refresh (to avoid dangerous delete/drop) } }else{ if ( $_REQUEST['refresh'] ){ check_xss();do_sql($SHOW_D); }elseif ($_REQUEST['crdb']){ check_xss();do_sql('CREATE DATABASE `'.$_REQUEST['new_db'].'`');do_sql($SHOW_D); }elseif ( preg_match('/^(?:show\s+(?:databases|status|variables|process)|create\s+database|grant\s+)/i',$SQLq) ){ check_xss();do_sql($SQLq); }else{ $err_msg="Select Database first"; if (!$SQLq) do_sql($SHOW_D); } } } $time_all=ceil((microtime_float()-$time_start)*10000)/10000; print_screen(); }else{ print_cfg(); } function do_sql($q){ global $dbh,$last_sth,$last_sql,$reccount,$out_message,$SQLq,$SHOW_T; $SQLq=$q; if (!do_multi_sql($q)){ $out_message="Error: ".mysqli_error($dbh); }else{ if ($last_sth && $last_sql){ $SQLq=$last_sql; if (preg_match("/^select|show|explain|desc/i",$last_sql)) { if ($q!=$last_sql) $out_message="Results of the last select displayed:"; display_select($last_sth,$last_sql); } else { $reccount=mysqli_affected_rows($dbh); $out_message="Done."; if (preg_match("/^insert|replace/i",$last_sql)) $out_message.=" Last inserted id=".get_identity(); if (preg_match("/^drop|truncate/i",$last_sql)) do_sql($SHOW_T); } } } } function display_select($sth,$q){ global $dbh,$DB,$sqldr,$reccount,$is_sht,$xurl; $rc=array("o","e"); $dbn=$DB['db']; $sqldr=''; $is_shd=(preg_match('/^show\s+databases/i',$q)); $is_sht=(preg_match('/^show\s+tables|^SHOW\s+TABLE\s+STATUS/',$q)); $is_show_crt=(preg_match('/^show\s+create\s+table/i',$q)); if ($sth===FALSE or $sth===TRUE) return;#check if $sth is not a mysql resource $reccount=mysqli_num_rows($sth); $fields_num=mysqli_field_count($dbh); $w=''; if ($is_sht || $is_shd) {$w='wa'; $url='?'.$xurl."&db=$dbn"; $sqldr.="
 MySQL Server:  ·Show Configuration Variables  ·Show Statistics  ·Show Processlist"; if ($is_shd) $sqldr.=" · "; $sqldr.="
"; if ($is_sht) $sqldr.=" Database: ·Show Table Status"; $sqldr.="
"; } if ($is_sht){ $abtn="  selected tables"; $sqldr.=$abtn.""; } $sqldr.=""; $headers=""; if ($is_sht) $headers.=""; for($i=0;$i<$fields_num;$i++){ if ($is_sht && $i>0) break; $meta=mysqli_fetch_field($sth); $headers.=""; } if ($is_shd) $headers.=""; if ($is_sht) $headers.=""; $headers.="\n"; $sqldr.=$headers; $swapper=false; while($row=mysqli_fetch_row($sth)){ $sqldr.=""; $v=$row[0]; if ($is_sht){ $vq='`'.$v.'`'; $url='?'.$xurl."&db=$dbn"; $v="" ."" ."" ."" ."" ."" ."" ."" ."" ."" ."" ."" ."" ."" .""; }elseif ($is_shd){ $url='?'.$xurl."&db=$v"; $v="$v" ."" ."" .""; }else{ for($i=0;$i<$fields_num;$i++){ $v=$row[$i]; if (is_null($v)) $v="NULL"; elseif (preg_match('/[\x00-\x09\x0B\x0C\x0E-\x1F]+/',$v)) { #all chars <32, except \n\r(0D0A) $vl=strlen($v);$pf=''; if ($vl>16 && $fields_num>1){#show full dump if just one field $v=substr($v, 0, 16);$pf='...'; } $v='BINARY: '.chunk_split(strtoupper(bin2hex($v)),2,' ').$pf; }else $v=hs($v); if ($is_show_crt) $v="
$v
"; $sqldr.=""; } } $sqldr.="\n"; } $sqldr.="
".$meta->name."show create databaseshow table statusshow triggersengine~rowsdata sizeindex sizeshow create tableexplainindexesexportdroptruncateoptimizerepaircomment
$v".$row[1]."".$row[4]."".$row[6]."".$row[8]."·sct·exp·ind·export·dr·tr·opt·rpr".hs($row[$fields_num-1]); $sqldr.="$vscdstatustrig"; $sqldr.="$v$v".(!strlen($v)?"
":'')."
\n".$abtn; } function print_header(){ global $err_msg,$VERSION,$DB,$dbh,$self,$is_sht,$xurl,$SHOW_T; $dbn=$DB['db']; ?> phpMiniAdmin
phpMiniAdmin | ">Databases: '>show tables &shex=1'>export &shim=1'>import | Settings | Logoff | phpinfo
=$MAX_ROWS_PER_PAGE) ){ $nav=""; } print_header(); ?>
 

  
Records: in sec
© 2004-2016 Oleg Savchuk

Access protected by password

DB Connection Settings



advanced settings
\n".mysqli_error($dbh1)."
\n$sql"); return $sth; } function db_array($sql, $dbh1=NULL, $skiperr=0, $isnum=0){#array of rows $sth=db_query($sql, $dbh1, $skiperr); if (!$sth) return; $res=array(); if ($isnum){ while($row=mysqli_fetch_row($sth)) $res[]=$row; }else{ while($row=mysqli_fetch_assoc($sth)) $res[]=$row; } return $res; } function db_row($sql){ $sth=db_query($sql); return mysqli_fetch_assoc($sth); } function db_value($sql,$dbh1=NULL,$skiperr=0){ $sth=db_query($sql,$dbh1,$skiperr); if (!$sth) return; $row=mysqli_fetch_row($sth); return $row[0]; } function get_identity($dbh1=NULL){ $dbh1=db_checkconnect($dbh1); return mysqli_insert_id($dbh1); } function get_db_select($sel=''){ global $DB,$SHOW_D; if (is_array($_SESSION['sql_sd']) && $_REQUEST['db']!='*'){//check cache $arr=$_SESSION['sql_sd']; }else{ $arr=db_array($SHOW_D,NULL,1); if (!is_array($arr)){ $arr=array( 0 => array('Database' => $DB['db']) ); } $_SESSION['sql_sd']=$arr; } return @sel($arr,'Database',$sel); } function chset_select($sel=''){ global $DBDEF; $result=''; if ($_SESSION['sql_chset']){ $arr=$_SESSION['sql_chset']; }else{ $arr=db_array("show character set",NULL,1); if (!is_array($arr)) $arr=array(array('Charset'=>$DBDEF['chset'])); $_SESSION['sql_chset']=$arr; } return @sel($arr,'Charset',$sel); } function sel($arr,$n,$sel=''){ foreach($arr as $a){ # echo $a[0]; $b=$a[$n]; $res.=""; } return $res; } function microtime_float(){ list($usec,$sec)=explode(" ",microtime()); return ((float)$usec+(float)$sec); } /* page nav $pg=int($_[0]); #current page $all=int($_[1]); #total number of items $PP=$_[2]; #number if items Per Page $ptpl=$_[3]; #page url /ukr/dollar/notes.php?page= for notes.php $show_all=$_[5]; #print Totals? */ function get_nav($pg, $all, $PP, $ptpl, $show_all=''){ $n=' '; $sep=" $n|$n\n"; if (!$PP) $PP=10; $allp=floor($all/$PP+0.999999); $pname=''; $res=''; $w=array('Less','More','Back','Next','First','Total'); $sp=$pg-2; if($sp<0) $sp=0; if($allp-$sp<5 && $allp>=5) $sp=$allp-5; $res=""; if($sp>0){ $pname=pen($sp-1,$ptpl); $res.="$w[0]"; $res.=$sep; } for($p_p=$sp;$p_p<$allp && $p_p<$sp+5;$p_p++){ $first_s=$p_p*$PP+1; $last_s=($p_p+1)*$PP; $pname=pen($p_p,$ptpl); if($last_s>$all){ $last_s=$all; } if($p_p==$pg){ $res.="$first_s..$last_s"; }else{ $res.="$first_s..$last_s"; } if($p_p+1<$allp) $res.=$sep; } if($sp+5<$allp){ $pname=pen($sp+5,$ptpl); $res.="$w[1]"; } $res.="
\n"; if($pg>0){ $pname=pen($pg-1,$ptpl); $res.="$w[2] $n|$n "; $pname=pen(0,$ptpl); $res.="$w[4]"; } if($pg>0 && $pg+1<$allp) $res.=$sep; if($pg+1<$allp){ $pname=pen($pg+1,$ptpl); $res.="$w[3]"; } if ($show_all) $res.=" ($w[5] - $all) "; return $res; } function pen($p,$np=''){ return str_replace('%p%',$p, $np); } function killmq($value){ return is_array($value)?array_map('killmq',$value):stripslashes($value); } function savecfg(){ $v=$_REQUEST['v']; $_SESSION['DB']=$v; unset($_SESSION['sql_sd']); if ($_REQUEST['rmb']){ $tm=time()+60*60*24*30; newcookie("conn[db]", $v['db'],$tm); newcookie("conn[user]",$v['user'],$tm); newcookie("conn[pwd]", $v['pwd'],$tm); newcookie("conn[host]",$v['host'],$tm); newcookie("conn[port]",$v['port'],$tm); newcookie("conn[chset]",$v['chset'],$tm); }else{ newcookie("conn[db]", FALSE,-1); newcookie("conn[user]",FALSE,-1); newcookie("conn[pwd]", FALSE,-1); newcookie("conn[host]",FALSE,-1); newcookie("conn[port]",FALSE,-1); newcookie("conn[chset]",FALSE,-1); } } // Allow httponly cookies, or the password is stored plain text in a cookie function newcookie($n,$v,$e){$x;return setcookie($n,$v,$e,$x,$x,!!$x,!$x);} //during login only - from cookies or use defaults; function loadcfg(){ global $DBDEF; if( isset($_COOKIE['conn']) ){ $_SESSION['DB']=$_COOKIE['conn']; }else{ $_SESSION['DB']=$DBDEF; } if (!strlen($_SESSION['DB']['chset'])) $_SESSION['DB']['chset']=$DBDEF['chset'];#don't allow empty charset } //each time - from session to $DB_* function loadsess(){ global $DB; $DB=$_SESSION['DB']; $rdb=$_REQUEST['db']; if ($rdb=='*') $rdb=''; if ($rdb) { $DB['db']=$rdb; } } function print_export(){ global $self,$xurl,$DB; $t=$_REQUEST['t']; $l=($t)?"Table $t":"whole DB"; print_header(); ?>

Export

Structure
Data

 
(to export as csv - go to 'show tables' and export just ONE table)


name).(($i<$fn-1)?",":"")); } ex_w($D); while($row=mysqli_fetch_row($sth)) ex_w(to_csv_row($row)); ex_end(); exit; } ex_hdr($ctp?$ctp:'text/plain',"$DB[db]".(($ct==1&&$t[0])?".$t[0]":(($ct>1)?'.'.$ct.'tables':'')).".sql$aext"); ex_w("-- phpMiniAdmin dump $VERSION$D-- Datetime: ".date('Y-m-d H:i:s')."$D-- Host: $DB[host]$D-- Database: $DB[db]$D$D"); ex_w("/*!40030 SET NAMES $DB[chset] */;$D"); $ex_super && ex_w("/*!40030 SET GLOBAL max_allowed_packet=16777216 */;$D$D"); ex_w("/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;$D$D"); $sth=db_query("show tables from `$DB[db]`"); while($row=mysqli_fetch_row($sth)){ if (!$rt||array_key_exists($row[0],$th)) do_export_table($row[0],1,$MAXI); } ex_w("/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;$D$D"); ex_w("$D-- phpMiniAdmin dump end$D"); ex_end(); exit; } function do_export_table($t='',$isvar=0,$MAXI=838860){ global $D; @set_time_limit(600); if($_REQUEST['s']){ $sth=db_query("show create table `$t`"); $row=mysqli_fetch_row($sth); $ct=preg_replace("/\n\r|\r\n|\n|\r/",$D,$row[1]); ex_w("DROP TABLE IF EXISTS `$t`;$D$ct;$D$D"); } if ($_REQUEST['d']){ $exsql=''; ex_w("/*!40000 ALTER TABLE `$t` DISABLE KEYS */;$D"); $sth=db_query("select * from `$t`"); while($row=mysqli_fetch_row($sth)){ $values=''; foreach($row as $v) $values.=(($values)?',':'').dbq($v); $exsql.=(($exsql)?',':'')."(".$values.")"; if (strlen($exsql)>$MAXI) { ex_w("INSERT INTO `$t` VALUES $exsql;$D");$exsql=''; } } if ($exsql) ex_w("INSERT INTO `$t` VALUES $exsql;$D"); ex_w("/*!40000 ALTER TABLE `$t` ENABLE KEYS */;$D$D"); } flush(); } function ex_hdr($ct,$fn){ header("Content-type: $ct"); header("Content-Disposition: attachment; filename=\"$fn\""); } function ex_start(){ global $ex_isgz,$ex_gz,$ex_tmpf; if ($ex_isgz){ $ex_tmpf=tmp_name().'.gz'; if (!($ex_gz=gzopen($ex_tmpf,'wb9'))) die("Error trying to create gz tmp file"); } } function ex_w($s){ global $ex_isgz,$ex_gz; if ($ex_isgz){ gzwrite($ex_gz,$s,strlen($s)); }else{ echo $s; } } function ex_end(){ global $ex_isgz,$ex_gz,$ex_tmpf; if ($ex_isgz){ gzclose($ex_gz); readfile($ex_tmpf); unlink($ex_tmpf); } } function print_import(){ global $self,$xurl,$DB; print_header(); ?>

Import DB

.sql or .gz file:



'(? '(? '\*\/', '#' => '[\r\n]+', '--' => '[\r\n]+', ); if ( $aCLOSE[$ochar] && preg_match("/(".$aCLOSE[$ochar].")/", $str, $m, PREG_OFFSET_CAPTURE, $pos ) ) { $clchar=$m[1][0]; $clpos=$m[1][1]; $sl=strlen($m[2][0]); if ($ochar=="'" && $sl){ if ($sl % 2){ #don't count as CLOSE char if number of slashes before ' ODD list($clchar, $clpos)=get_close_char($str, $clpos+strlen($clchar), $ochar); }else{ $clpos+=strlen($clchar)-1;$clchar="'";#correction } } } return array($clchar, $clpos); } function do_one_sql($sql){ global $last_sth,$last_sql,$MAX_ROWS_PER_PAGE,$page,$is_limited_sql, $last_count; $sql=trim($sql); $sql=preg_replace("/;$/","",$sql); if ($sql){ $last_sql=$sql;$is_limited_sql=0; $last_count=NULL; if (preg_match("/^select/i",$sql) && !preg_match("/limit +\d+/i", $sql)){ #get total count $sql1='select count(*) from ('.$sql.') ___count_table'; $last_count=db_value($sql1,NULL,'noerr'); $offset=$page*$MAX_ROWS_PER_PAGE; $sql.=" LIMIT $offset,$MAX_ROWS_PER_PAGE"; $is_limited_sql=1; } $last_sth=db_query($sql,0,'noerr'); return $last_sth; } return 1; } function do_sht(){ global $SHOW_T; $cb=$_REQUEST['cb']; if (!is_array($cb)) $cb=array(); $sql=''; switch ($_REQUEST['dosht']){ case 'exp':$_REQUEST['t']=join(",",$cb);print_export();exit; case 'drop':$sq='DROP TABLE';break; case 'trunc':$sq='TRUNCATE TABLE';break; case 'opt':$sq='OPTIMIZE TABLE';break; } if ($sq){ foreach($cb as $v){ $sql.=$sq." $v;\n"; } } if ($sql) do_sql($sql); do_sql($SHOW_T); } function to_csv_row($adata){ global $D; $r=''; foreach ($adata as $a){ $r.=(($r)?",":"").qstr($a); } return $r.$D; } function qstr($s){ $s=nl2br($s); $s=str_replace('"','""',$s); return '"'.$s.'"'; } function get_rand_str($len){ $result=''; $chars=preg_split('//','ABCDEFabcdef0123456789'); for($i=0;$i<$len;$i++) $result.=$chars[rand(0,count($chars)-1)]; return $result; } function check_xss(){ global $self; if ($_SESSION['XSS']!=trim($_REQUEST['XSS'])){ unset($_SESSION['XSS']); header("location: $self"); exit; } } function rw($s){#for debug echo hs(var_dump($s))."
\n"; } function tmp_name() { if ( function_exists('sys_get_temp_dir')) return tempnam(sys_get_temp_dir(),'pma'); if( !($temp=getenv('TMP')) ) if( !($temp=getenv('TEMP')) ) if( !($temp=getenv('TMPDIR')) ) { $temp=tempnam(__FILE__,''); if (file_exists($temp)) { unlink($temp); $temp=dirname($temp); } } return $temp ? tempnam($temp,'pma') : null; } function hs($s){ return htmlspecialchars($s, ENT_COMPAT|ENT_HTML401,'UTF-8'); } function eo($s){//echo+escape echo hs($s); } function b64e($s){ return base64_encode($s); } ?>