PHP mysql查询工具
PHP基于PDO的 mysql 查询工具
单页面实现,将页面放在任意目录即可。
访问用户 admin 密码 password
代码很简单,主要为了在没有phpMyAdmin时方便执行SQL。
效果如下:

代码如下:
<?php // 权限验证
$user_list = [
'admin' => 'password',
]; $user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW']; if (empty($user_list[$user]) || $user_list[$user] != $pass)
{
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
die ("Not authorized");
} // 参数
$row_limit = @$_GET['row_limit'] ?: 1000; // 显示行数限制
$str_limit = @$_GET['str_limit'] ?: 100; // 显示值长度限制
$db_config = [
'connect' => @$_POST['db_connect'] ?: '',
'user' => @$_POST['db_user'] ?: '',
'password' => @$_POST['db_password'] ?: '',
]; $sql = @$_POST['sql'] ?: ''; // 查询SQL
function runSql($db, $sql)
{
$dt_begin = round(microtime(true) * 1000); $con = new PDO($db['connect'], $db['user'], $db['password'], [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES `utf8`',
PDO::ATTR_PERSISTENT => FALSE,
]); $con -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con -> setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); $sql = trim($sql); $sql_type = strtoupper(explode(' ', $sql)[0]); if (strpos($sql, 'INTO OUTFILE') !== FALSE)
{
$sql_type = 'OUTFILE';
} $cmd = $con -> prepare($sql); $cmd -> execute(); $return = NULL;
if ($sql_type == 'SELECT' || $sql_type == 'SHOW' || $sql_type == 'DESC')
{
$return = $cmd -> fetchAll(PDO::FETCH_ASSOC);
}
else if ($sql_type == 'INSERT')
{
$return = $con -> lastInsertId();
}
else
{
$return = $cmd -> rowCount();
} $dt_begin = round(microtime(true) * 1000) - $dt_begin;
$res = [
'use_time' => $dt_begin,
'data' => $return,
]; return $res;
} // 执行SQL
$res = null;
$error = '';
if (!empty($sql))
{
try
{
$res = runSql($db_config, $sql);
}
catch(Exception $ex)
{
$error = $ex;
}
} // 格式化值输出
function f($v)
{
global $str_limit; $row_count = count(explode("\n", $v)); $v = htmlspecialchars($v);
$v = nl2br($v); if (strlen($v) > $str_limit)
{
$v = substr($v, 0, $str_limit) . '...';
} if ($row_count > 1)
{
$v = '<div style="text-align:left;">' . $v . '</div>';
} return $v;
} ?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>DB 查询工具</title>
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<style>
body{
line-height:1.5;
font-family:consolas, Courier New;
}
input[type=text], input[type=password], textarea{
font-family:consolas, Courier New;
padding:3px;
}
</style>
</head>
<body>
<h1 style="margin:5px 0; font-size:16px;">MySql 查询工具</h1>
<form id="frmQuery" method="POST">
<input type="text" name="db_connect" style="width:500px;" value="<?=$db_config['connect'] ?>" placeholder="连接字符串" />
<input type="text" name="db_user" style="width:100px;" value="<?=$db_config['user'] ?>" placeholder="用户名" />
<input type="password" name="db_password" style="width:100px;" value="<?=$db_config['password'] ?>" placeholder="密码" /><br>
<div style="font-size:12px; color:gray;">例如:mysql:host=localhost;port=3306;dbname=test</div>
<textarea name="sql" placeholder="SQL语句" style="color:blue; width:740px; height:150px; font-size:14px;"><?=$sql ?></textarea>
<div>
<button type="submit">执行</button>
 
<button type="button" onclick="runSql('show tables;'); return false;">所有表</button>
<button type="button" onclick="runSql('show table status;'); return false;">表详情</button>
<button type="button" onclick="runSql('show full processlist;'); return false;">进程</button>
<button type="button" onclick="runSql('show databases;'); return false;">数据库</button>
<button type="button" onclick="runSql('show status;'); return false;">状态</button>
<button type="button" onclick="runSql('show errors;'); return false;">错误</button>
<button type="button" onclick="runSql('show warnings;'); return false;">警告</button>
<button type="button" onclick="runSql('show create table table1;'); return false;">表创建</button>
<button type="button" onclick="runSql('desc table1;'); return false;">表字段</button>
<button type="button" onclick="runSql('show variables;'); return false;">配置</button>
</div>
</form>
<hr>
<?php if (!empty($error)) { ?>
<pre style="color:red; font-size:14px; font-family:consolas, Courier New;"><?= $error ?></pre>
<?php } ?>
<?php if (!empty($res)) { ?>
<span>执行用时:<?= $res['use_time']; ?>ms</span>
<?php if (is_array($res['data'])) { ?>
<style>
.table{
border-spacing: 0;
border-collapse: collapse;
border:solid 2px #aaa;
background:#fff;
font-size:12px;
}
.table th{
font-weight:normal;
}
.table td, .table th{
border:solid 1px #aaa;
padding:3px 5px;
text-align:center;
white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}
.table thead{border-bottom:solid 2px #aaa; background:#ddd;}
.table tbody tr:hover{background:#eff;}
</style>
<span>共<?= count($res['data']); ?>行</span>
<?php if (count($res['data']) > 0) { ?>
<span>共<?= count(array_keys($res['data'][0])); ?>列</span>
<table class="table">
<thead>
<tr>
<th>#</th>
<?php foreach (array_keys($res['data'][0]) as $r) { ?>
<th><?= f($r); ?></th>
<?php } ?>
</tr>
</thead>
<tbody>
<?php
$i = 0;
foreach ($res['data'] as $r) {
$i++;
if ($i > $row_limit)
{
break;
}
?>
<tr>
<td><?= $i; ?></td>
<?php foreach ($r as $rr) { ?>
<td><?= f($rr); ?></td>
<?php } ?>
</tr>
<?php } ?>
</tbody>
</table>
<?php } ?>
<?php }else{ ?>
<span>影响行数:<?= $res['data']; ?></span>
<?php } ?>
<?php } ?> <script>
function runSql(sql)
{
$('textarea[name=sql]').val(sql);
$('#frmQuery').submit();
} $(function(){
$('#frmQuery').submit(function(){
if (window.localStorage)
{
window.localStorage.setItem('db_connect', $('input[name=db_connect]').val());
window.localStorage.setItem('db_user', $('input[name=db_user]').val());
window.localStorage.setItem('db_password', $('input[name=db_password]').val());
window.localStorage.setItem('db_sql', $('textarea[name=sql]').val());
}
}); if (window.localStorage)
{
var v = null;
v = window.localStorage.getItem('db_connect');
$('input[name=db_connect]').val(v||'');
v = window.localStorage.getItem('db_user');
$('input[name=db_user]').val(v||'');
v = window.localStorage.getItem('db_password');
$('input[name=db_password]').val(v||'');
v = window.localStorage.getItem('db_sql');
$('textarea[name=sql]').val(v||'');
}
});
</script>
</body>
</html>
PHP mysql查询工具的更多相关文章
- Mysql编辑工具中使用(Navicat查询结果显示行号)
Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';
- 三十二. 多表查询 MySQL管理工具 、 用户授权及撤销
1.MySQL管理工具 部署LAMP+phpMyAdmin平台 安装httpd.mysql.php-mysql及相关包 启动httpd服务程序 解压phpMyAdmin包,部署到网站目录 配置conf ...
- Python3实现火车票查询工具
Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1. 知识点: Pyth ...
- 15款最佳的MySQL管理工具和应用程序
工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...
- 最棒的10款MySQL GUI工具
绝大多数的关系数据库都明显不同于MS Access,它们都有两个截然不同的部分:后端作为数据仓库,前端作为用于数据组件通信的用户界面.这种设计非常巧妙,它并行处理两层编程模型,将数据 层从用户界面中分 ...
- Mysql 复制工具(percona-toolkit)
Mysql 复制工具 1.percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检 ...
- MySQL Server类型之MySQL客户端工具的下载、安装和使用
本博文的主要内容有 .MySQL Server 5.5系列的下载 .MySQL Server 5.5系列的安装 .MySQL Server 5.5系列的使用 .MySQL Server 5.5系列的卸 ...
- 强大的数据库查询工具Database.NET 9.4.5018.42
原文:强大的数据库查询工具Database.NET 9.4.5018.42 强大的数据库查询工具Database.NET 9.4.5018.42 两个工具的下载地址,两个软件都是绿色免安装的,直接双击 ...
- Python 实现火车票查询工具
注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...
随机推荐
- python assert的作用
使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单.在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件 ...
- selenium设置proxy、headers(phantomjs、Chrome、Firefox)
phantomjs 设置ip 方法1: service_args = [ '--proxy=%s' % ip_html, # 代理 IP:prot (eg:192.168.0.28:808) '--p ...
- python3 os模块的常用功能及方法总结
1.os.getcwd() #显示当前工作路径 2.os.listdir('dirname') #返回指定目录下的所有文件和目录名 3.os.remove('filename') ...
- 转载:python + requests实现的接口自动化框架详细教程
转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...
- PLINQ的 ForAll 对比集合的ForEach
在 PLINQ 中,还可以使用 foreach 执行查询以及循环访问结果. 但是,foreach 本身不会并行运行,因此,它要求将所有并行任务的输出合并回该循环正在上面运行的线程中. 在 PLINQ ...
- 通过jenkins持续集成 github中的代码到 服务器。
前言 最近自己在探索springboot框架,了解到 jenkins 具有 自动我github 上带项目部署到 tomcat 中.于是决定先搭建一个jenkins 环境在继续研究. Jenkins简介 ...
- 拯救莫莉斯 状压dp
题目大意:每个点有费用,要求选出花费最少的一些点,使得全部点都满足:他被选或与他相邻的任意点被选. 没看清数据范围233333 和翻格子游戏一样,考虑上中下三行,可行才能转移 f[i][j][k]表示 ...
- SpringBoot集成Security,JWT,Swagger全分析
GitHub地址: https://github.com/li-jun0201/springsecuritydemo本项目采用SpringBoot1.5.9, SpringSecurity,JWT, ...
- 使用jquery 的ajax 与 Java servlet的交互
由于是使用jquery的 所以别忘记导入jq 下面是jsp文件 <%@ page language="java" contentType="text/html; c ...
- Java I/O流详解与应用
注:学习之前,需要自己思考,不要盲目的去看!!!!!不然没有任何意义 I/O流(一) 1.定义:实现设备之间的传输 2.作用:实现数据的读入和写出 3.分类:根据操作分为:输入流和输出流 根据类型分为 ...