网页上直接sql查询操作数据库,并在网页上展示列表数据的工具页面
很多人可能跟我一样,需要连接N都个数据库,进行操作, 有时候要查某个服务器下某个数据库的某张表的数据. 然后只能打开连接远程服务器, 连接远程数据库, 然后再sql语句操作. 每次都很烦,所以有空做了个 连接数据库操作的工具页面.
直接工具栏输入, 下面显示查询结果列表
前端: easyui 前端我用的是easyui的表格功能,这个做列表数据展示还不错,
后端: php 接口,
直接贴代码.
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title></title>
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4/themes/default/easyui.css">
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4/themes/icon.css">
<script type="text/javascript" src="jquery-easyui-1.4/jquery.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.4/jquery.easyui.min.js"></script>
<script type="text/javascript" src="jquery-easyui-1.4/locale/easyui-lang-zh_CN.js"></script>
</head>
<body style="padding:0px;margin:0px">
<table id="dg" style="width:100%;" data-options=""></table>
<div id="toolbar">
<table style='width:100%'>
<div id="toolbar">
<form >
<div>类型:<select name="type">
<option value="0" selected="selected">综合区</option>
<option value="1">指定区</option>
</select>
数据库名:<input type="text" name="db_name" placeholder="DATABASE" value="" id="db_name" /></div>
<div>区ID:<input type="text" name="zoneid" placeholder="ZONE" value="" id="zoneid" /></div>
<div>
SQL语句:<textarea name="sqlstr" rows="3" cols="30" ></textarea> <a href="javascript:;" onclick="select_gift();" class="easyui-linkbutton" iconCls="icon-undo" >gift</a>
</div>
</form>
<div>
<button type="button" onclick="datagrid_load();" class="easyui-linkbutton" iconCls="icon-search" >查询</button>
</div>
</div>
</table>
</div>
<script type="text/javascript">
//动态展示列和数据
var datagrid_load = function () {
var columns = new Array();//定义列数组
var ser = encodeURI($('form').serialize());//参数需要跟 下面保持一致
$.getJSON('sql_toolbar_port.php?head=1&'+ser, null, function (result) {//通过方法获得后台数据,该方法不唯一。
/*var column = {
field: 'field', title: '不变的', width: 100, sortable: true, editor: 'textReadonly',
}
columns.push(column);//将固定写死的列,存入列数组中*/
for (var i = 0; i < result.length; i++) {//遍历获得的后台数据,这是需要动态显示的表头数据源
var column1 = {
field: result[i].field, title: result[i].title , width: 70, sortable: true, editor: {
type: 'numberbox',
}
}// field字段和title值都是根据后台的数据来赋值
columns.push(column1);//将需要动态显示的列,存入列数组中
}
initTable(columns);
});
}
$(function () {
})
function initTable(columns) {
grid = $('#dg').datagrid({ //定位到Table标签,Table标签的ID是grid
url: 'sql_toolbar_port.php', //指向后台的Action来获取当前菜单的信息的Json格式的数据
title: 'sql查询',
iconCls: 'icon-view',
// height: 650,
// width: '100%',
fit: true,
idField: 'ID',
toolbar: '#toolbar',
method : 'post',
fitColumns:false, //横向滚动条
queryParams: {zoneid:$("input[name='zoneid']").val(),type:$("select[name='type']").val(),db_name:$("input[name='db_name']").val(),sqlstr:encodeURI($("textarea[name='sqlstr']").val())},
// queryParams: $("form").serialize(), //异步查询的参数
columns: [
columns,//通过js动态生成,这是关键。
],
});
};
function select_gift() {
var obj1 = $("form").serializeArray();
$.each(obj1,function (i,field) {
alert(field.name + '=' + field.value);
})
}
</script>
</body>
</html>
因为easyui的datagrid 表格插件, 官方没有给出 动态输出表格动态展示列的例子, 我采用的是动态获取列.
列标题 一个接口, 列数据一次接口. 我觉得两个本来就是一个查询, 所以放到了一个页面, 只做了返回值的区分, 列标题传一个head=1的参数.
JS两个ajax函数, 一个是获取列的, 下面是获取数据的, 上面获取后把列字符串给到下面的 datagrid表格控件去展示.
注意两个函数的参数都要一致,否则会出错.
看看PHP页面.
include_once 'database.php';
include_once 'function.php';
include_once 'models/ZoneClass.php';
$Zone = new ZoneClass(DATABASE_HOST,DATABASE_USER,DATABASE_PASS,DATABASE_PORT,DB_FENTIANSJ);
include_once 'models/GmCode.php';
$GMCODE = new GmCode(DATABASE_HOST,DATABASE_USER,DATABASE_PASS,DB_EXTGAME,DATABASE_PORT);
$con = mysqli_connect(DATABASE_HOST,DATABASE_USER, DATABASE_PASS, DB_ADMIN, DATABASE_PORT);
$con ? '': die('连接失败');
$head = empty($_REQUEST['head']) ? '' : $_REQUEST['head'];
$type = empty($_REQUEST['type']) ? 0:1;
$db_name = empty($_REQUEST['db_name']) ? '': urldecode($_REQUEST['db_name']);
$zoneid = empty($_REQUEST['zoneid']) ? '' : $_REQUEST['zoneid'];
$sqlstr = empty($_REQUEST['sqlstr']) ? '' : urldecode($_REQUEST['sqlstr']) ;
$rows = array();
//echo urldecode($sqlstr);die();
if($type ==0){
mysqli_set_charset($con,'utf8');
mysqli_select_db($con,$db_name) or die("mysql select db error ".mysqli_error($con));//设置或修改数据库
$result = mysqli_query($con,$sqlstr);
while ($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
}
}else{
$rows = $Zone->readZoneData($zoneid,$sqlstr);
}
//var_dump($rows);
//die();
$array = array();
if (!$rows){
echo '{"error":"没有数据","rows":[]}';exit();
}
if($head == 1){//读取列
$jsons1 = '';
foreach ($rows[0] as $k=>$v){
// $jsons1 .= '{"title":"'.$k.'","field":"'.$k.'","width":"100","align":"center"},';
$jsons1[] = array(
'field' =>$k,
'title' =>$k,
'align' => 'center',
"width" => 200,
);
}
echo json_encode($jsons1);
// echo '[{"field":"id","title":"ID"},{"field":"gm_code","title":"gm"},{"field":"gm_zones","title":"gm_zones"},{"field":"action","title":"action"},{"field":"state","title":"state"},{"field":"timesss","title":"timesss"},{"field":"ctime","title":"ctime"}]';
}else{
//读取数据
echo json_encode($rows);
}
die();
这是个原生的php, 直接用mysqli连接,
前面引入的是连接数据库的公共文件.
先说说数据库情况,
default 数据库 : 默认数据库, 服务器 IP 10.10.1.1. 所以选择综合区,填写操作的数据库即可
其他区数据库(每个区的服务器都不同): 我这里在默认服务器下,有一个ZONE区数据表, 记录不同ZONE ID的 服务器IP 账号 密码 等.
所以要查询 某个区下面的数据库, 填写区ID 即可, 引入的ZoneClass是封装文件.
你们可以直接 把你们多个服务器做成一个SELECT下拉框, 一个数据库 文本框, 一个SQL语句文本框.
代码没什么好说的, 有注释, head是只取字段名, 然后把字段名转为json字符串.前端获取后展示列标题. 另外一个就是获取数据. 遵循easyui 表格的规则