php读取数据库列表以及操作数据库修改密码,用来有ftp以及有文件权限时,但是缺不知道后台密码,或者忘记后台密码,后台密码被重置的情况了
还可以用在比如说有的空间有防火墙,直接把phpmyadmin或者adminer之类的传上去会被拦截的情况,像昨天晚上我就遇到一例,一个人的后台密码被黑了被改了,弱口令,但是又临时需要急着传图片,无奈我只能手搓一个php先把后台密码改了,再回去后台传
注意事项
1、不一定能用,因为后续让ai重写的,我开始还没整合成一个php,但是应该没问题的,逻辑是这么个逻辑
2、下列直接修改的仅适用于普通的md5密码存储,如果是特定的源码不是直接md5密码加密的,还需要改成对应的算法密文储存的数据才行哦
简易数据库管理小工具(PHP5.3+ 兼容,极简代码)
采用原生PDO(PHP5.3默认自带),无框架、无第三方类库,结构极简,三个功能:
- 连接数据库,展示所有数据表
- 点击表名查看该表全部数据
- 根据ID编辑任意字段值保存
db_manager.php 完整单文件代码
<?php
// ==========数据库配置(自行修改)==========
$db_host = 'localhost';
$db_user = 'root';
$db_pwd = 'root';
$db_name = 'testdb';
$charset = 'utf8';
// PDO连接数据库(PHP5.3兼容写法)
try {
$dsn = "mysql:host=$db_host;dbname=$db_name;charset=$charset";
$pdo = new PDO($dsn, $db_user, $db_pwd);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
die("数据库连接失败:".$e->getMessage());
}
// 获取当前操作
$action = isset($_GET['act']) ? $_GET['act'] : 'tables';
$table = isset($_GET['table']) ? $_GET['table'] : '';
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
// 1、展示所有数据表
if($action == 'tables'){
$stmt = $pdo->query("SHOW TABLES");
$tables = $stmt->fetchAll(PDO::FETCH_NUM);
echo '<h3>数据库 '.$db_name.' 所有数据表</h3>';
echo '<ul>';
foreach($tables as $t){
$tb = $t[0];
echo "<li><a href='?act=show&table=$tb'>$tb</a></li>";
}
echo '</ul>';
}
// 2、查看指定表数据列表
elseif($action == 'show' && !empty($table)){
echo "<p><a href='?'>返回表列表</a></p>";
echo "<h3>数据表:$table</h3>";
// 查询表字段
$fieldStmt = $pdo->query("DESC `$table`");
$fields = $fieldStmt->fetchAll(PDO::FETCH_ASSOC);
// 查询表数据
$dataStmt = $pdo->query("SELECT * FROM `$table`");
$rows = $dataStmt->fetchAll(PDO::FETCH_ASSOC);
if(empty($rows)){
echo '<p>该表暂无数据</p>';
}else{
// 输出表头
echo '<table border="1" cellpadding="4">';
echo '<tr>';
foreach($fields as $f){
echo '<th>'.$f['Field'].'</th>';
}
echo '<th>操作</th></tr>';
// 输出数据行
foreach($rows as $row){
echo '<tr>';
foreach($row as $k=>$v){
echo '<td>'.htmlspecialchars($v).'</td>';
}
// 取第一个字段当做主键ID(常规自增id)
$pk = $fields[0]['Field'];
$pkVal = $row[$pk];
echo "<td><a href='?act=edit&table=$table&id=$pkVal'>编辑</a></td>";
echo '</tr>';
}
echo '</table>';
}
}
// 3、编辑单条数据表单
elseif($action == 'edit' && !empty($table) && $id>0){
echo "<p><a href='?act=show&table=$table'>返回表数据</a></p>";
echo "<h3>编辑ID=$id 的数据</h3>";
// 获取表字段
$fieldStmt = $pdo->query("DESC `$table`");
$fields = $fieldStmt->fetchAll(PDO::FETCH_ASSOC);
$pk = $fields[0]['Field'];
// 查询本条数据
$rowStmt = $pdo->prepare("SELECT * FROM `$table` WHERE `$pk`=?");
$rowStmt->execute([$id]);
$row = $rowStmt->fetch(PDO::FETCH_ASSOC);
if(!$row) die('数据不存在');
// 提交保存修改
if($_POST){
$setArr = [];
$param = [];
foreach($fields as $f){
$fname = $f['Field'];
if($fname == $pk) continue; // 主键不允许修改
$val = isset($_POST[$fname]) ? $_POST[$fname] : '';
$setArr[] = "`$fname`=?";
$param[] = $val;
}
$param[] = $id;
$sql = "UPDATE `$table` SET ".implode(',',$setArr)." WHERE `$pk`=?";
$updateStmt = $pdo->prepare($sql);
$updateStmt->execute($param);
echo '<p style="color:green;">修改成功!<a href="?act=show&table='.$table.'">点击返回数据列表</a></p>';
}
// 输出编辑表单
echo '<form method="post">';
foreach($fields as $f){
$fname = $f['Field'];
$val = htmlspecialchars($row[$fname]);
if($fname == $pk){
echo "<p>$fname:$val (主键不可修改)</p>";
}else{
echo "<p>$fname:<input type='text' name='$fname' value='$val' style='width:350px;'></p>";
}
}
echo '<p><button type="submit">保存修改</button></p>';
echo '</form>';
}
?>
使用说明
- 修改代码顶部数据库配置项:主机、用户名、密码、数据库名
- 直接放到PHP5.3及以上环境运行(PHP5.3默认开启PDO-MySQL)
- 流程:
- 首页:列出当前库所有数据表
- 点表名:查看该表全部数据
- 每行右侧点【编辑】:打开表单修改除主键ID外所有字段,提交保存
兼容性说明
- PHP5.3 原生支持 PDO,无需额外安装扩展
- 使用
htmlspecialchars防XSS简单安全处理 - 使用预处理语句防SQL注入
- 自动把表第一个字段作为主键(一般为id自增主键),主键禁止修改
- 单文件极简实现,无样式冗余代码,可自行加CSS美化
简易安全提醒
本代码仅用于本地内网测试,不要直接部署到公网,没有做访问权限验证,公网使用需要加登录验证。
需要我给代码加一段极简CSS美化表格页面吗?
