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>
&emsp;
<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查询工具的更多相关文章

  1. Mysql编辑工具中使用(Navicat查询结果显示行号)

    Mysql编辑工具中使用(Navicat查询结果显示行号) as rownum,a.roleId ) t where a.roleId='admin';

  2. 三十二. 多表查询 MySQL管理工具 、 用户授权及撤销

    1.MySQL管理工具 部署LAMP+phpMyAdmin平台 安装httpd.mysql.php-mysql及相关包 启动httpd服务程序 解压phpMyAdmin包,部署到网站目录 配置conf ...

  3. Python3实现火车票查询工具

    Python 实现火车票查询工具 一. 实验介绍 通过python3实现一个简单的命令行版本的火车票查询工具,用实际中的例子会更感兴趣,不管怎么样,既练习了又可以自己使用. 1.  知识点: Pyth ...

  4. 15款最佳的MySQL管理工具和应用程序

    工欲善其事,必先利其器.几乎每个开发人员都有最钟爱的 MySQL 管理工具,它帮助开发人员在许多方面支持包括 PostgreSQL,MySQL,SQLite,Redis,MongoDB 等在内的多种数 ...

  5. 最棒的10款MySQL GUI工具

    绝大多数的关系数据库都明显不同于MS Access,它们都有两个截然不同的部分:后端作为数据仓库,前端作为用于数据组件通信的用户界面.这种设计非常巧妙,它并行处理两层编程模型,将数据 层从用户界面中分 ...

  6. Mysql 复制工具(percona-toolkit)

    Mysql 复制工具 1.percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检 ...

  7. MySQL Server类型之MySQL客户端工具的下载、安装和使用

    本博文的主要内容有 .MySQL Server 5.5系列的下载 .MySQL Server 5.5系列的安装 .MySQL Server 5.5系列的使用 .MySQL Server 5.5系列的卸 ...

  8. 强大的数据库查询工具Database.NET 9.4.5018.42

    原文:强大的数据库查询工具Database.NET 9.4.5018.42 强大的数据库查询工具Database.NET 9.4.5018.42 两个工具的下载地址,两个软件都是绿色免安装的,直接双击 ...

  9. Python 实现火车票查询工具

    注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...

随机推荐

  1. 【手记】小心在where中使用NEWID()的大坑

    这个表达式: --把GUID弄成正整数,然后取模 是随机返回0.1.2这三个数,不可能返回其它东西,但是如果把它用在where里面,就会发生很神奇的事情,比如这个查询: --创建一个只有1列3行的表, ...

  2. sql server 分区(上)

    分区发展历程      基于表的分区功能为简化分区表的创建和维护过程提供了灵活性和更好的性能.追溯到逻辑分区表和手动分区表的功能. 二.为什么要进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩 ...

  3. 关于checkpoint

    Ⅰ.Checkpoint 1.1 checkpoint的作用 缩短数据库的回复时间 缓冲池不够用时,将脏页刷到磁盘 重做日志不可用时,刷新脏页 1.2 展开分析 page被缓存在bp中,page在bp ...

  4. Latex数学公式中的空格表示方法

    两个quad空格 a \qquad b 两个m的宽度 quad空格 a \quad b 一个m的宽度 大空格 a\ b 1/3m宽度 中等空格 a\;b 2/7m宽度 小空格 a\,b 1/6m宽度 ...

  5. Centos7 修改硬件时间和系统时间

    查看系统时间 [root@localhost ~]# date Tue Jun 13 10:20:13 CST 2017 查看硬件时间 [root@localhost ~]# hwclock --sh ...

  6. Linux.安装phantomjs

    PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速,原生支持各种Web标准: DOM 处理, CSS 选择器, JSON, ...

  7. 在Windows Server 2008 R2下搭建jsp环境(二)-JDK的下载安装

    因为服务器上的Tomcat的运行环境需要JDK的支持,所以,掌握JDK的安装与下载和配置是一个重要步骤.   1.首先下载最新的JDK版本.网络上提供了最新版本的JDK下载,如图所示.首先选择&quo ...

  8. Mac下显示隐藏的文件

    显示隐藏文件defaults write com.apple.finder AppleShowAllFiles -bool true; KillAll Finder恢复隐藏文件 defaults wr ...

  9. 用Axure进行原型设计

    用Axure进行原型设计   看这个视频 http://www.iqiyi.com/playlist409963402.html

  10. protocol_v2.go

    {         return protocol.NewFatalClientErr(nil, "E_INVALID",             fmt.Sprintf(&quo ...