<?php
//替换数据库内容类
class replace{
public $dbAddress; //数据库地址
public $dbUser; //数据库用户名
public $dbPwd; //数据库密码
public $dbName; //数据库名称
public $dbPort; //数据库端口
public $keywords; //需要替换的关键字
public $result_keywords; //替换成什么 //数据库连接
public function dbConnect($dbAddress,$dbUser,$dbPwd,$dbName,$dbPort=''){
if(empty($dbPort)){
$dbPort = '3306';
}
$this->dbAddress = $dbAddress;
$this->dbUser = $dbUser;
$this->dbPwd = $dbPwd;
$this->dbName = $dbName;
$this->dbPort = $dbPort;
//数据库连接
$dbCon = mysql_connect($dbAddress.':'.$dbPort,$dbUser,$dbPwd);
//数据库连接验证
if($dbCon){
//数据库连接成功
//指定数据库
$assign = mysql_select_db($dbName,$dbCon);
if($assign){
mysql_query("set names 'utf8'"); //设置要使用的字符集
return array('return'=>true,'ps'=>'数据库连接成功');
}
else{
return array('return'=>false,'ps'=>'指定数据库失败');
}
}
else{
//数据库连接失败
return array('return'=>false,'ps'=>'数据库连接失败:'.mysql_error());
}
} //查询所有表
public function queryTable(){
$rs = mysql_query("SHOW TABLES FROM ".$this->dbName);
$tables = array();
while ($row = mysql_fetch_row($rs)) {
$tables[] = $row[0];
}
mysql_free_result($rs);
return $tables;
} //查询所有带关键字的数据并替换
/*
table 数据库中的所有表名数组
keywords 查询的关键字
result 要替换成什么
*/
public function queryReplace($table,$keywords='',$result_keywords=''){
$this->keywords = $keywords;
$this->result_keywords = $result_keywords;
$arr = array(); //装载返回信息
$index = 1; //自增值 //循环所有表
foreach($table as $key=>$v){
$result = mysql_query('select * from '.$v); for ($i=0;$i<mysql_num_fields($result);$i++){
$fieldName = mysql_field_name($result,$i);
//到这里,数据库名称是 $this->dbName 表名是 $v 字段名是 $fieldName
$fieldResult = mysql_query('select '.$fieldName.' from '.$v);
while($fieldRow = mysql_fetch_array($fieldResult)){
//判断该字段中的数据内容是否存在将要替换的关键字
$fieldValue = $fieldRow[$fieldName];
if(strpos($fieldValue,$keywords) !== false){
//如果存在就继续执行替换
$replaceBack = str_replace($keywords,$result_keywords,$fieldValue);
//更换数据
if(mysql_query('update '.$v.' set '.$fieldName.'="'.$replaceBack.'" where '.$fieldName.'="'.$fieldValue.'"')){
$arr[$index]["dbName"] = $this->dbName;
$arr[$index]["tableName"] = $v;
$arr[$index]["fieldName"] = $fieldName;
$index++;
}
}
}
}
}
return $arr;
}
} //程序逻辑
$replace = new replace(); //实例化类
$steps = $_GET["steps"]; //执行步骤
//dbSet数据库信息设置
//detection检测
if(empty($steps)){
$steps = 'dbSet';
}
if($steps=='detection'){
$dbAddress = $_POST["dbAddress"];
$dbUser = $_POST["dbUser"];
$dbPwd = $_POST["dbPwd"];
$dbName = $_POST["dbName"];
$dbPort = $_POST["dbPort"];
$keywords = $_POST["keywords"];
$result_keywords = $_POST["result_keywords"];
if(empty($dbAddress) || empty($dbUser) || empty($dbPwd) || empty($dbName) || empty($dbPort) || empty($keywords)){
die("带星号的值必须填写");
}
$db = $replace->dbConnect($dbAddress,$dbUser,$dbPwd,$dbName,$dbPort);
$queryTable = $replace->queryTable();
}
//以下为HTML
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>批量替换MySql数据库内容 UTF-8 1.0版</title>
<style>
*{margin:0;padding:0;font-size:12px;}
.box{
width: 300px;
padding: 20px;
border: 1px solid #eee;
margin: 0 auto;
margin-top: 150px;
background-color: #fcfcfc;
}
h1{
font-size: 16px;
line-height: 40px;
font-weight: bold;
color: #333;
}
h2{
line-height: 25px;
font-weight: normal;
color: #999;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #eee;
margin-bottom: 15px;
}
p{
min-height: 30px;
}
p input{
border: 1px solid #ccc;
padding-top: 3px;
padding-right: 5px;
padding-bottom: 3px;
padding-left: 5px;
}
a{
color: #03F;
}
span{
line-height: 25px;
color: #F00;
}
</style>
</head> <body>
<div class="box">
<h1>批量替换MySql数据库内容 UTF-8 1.0版</h1>
<h2>本程序因为编码是UTF-8所以只支持此类型编码的数据库替换,如果您是其它类型的数据库请修改本源码</h2>
<?php if($steps=='dbSet'){?>
<form id="form1" name="form1" method="post" action="?steps=detection">
<p>数据库地址:<input type="text" name="dbAddress" value="localhost" /> *
<p>数据库用户:<input type="text" name="dbUser" /> *
<p>数据库密码:<input type="text" name="dbPwd" /> *
<p>数据库名称:<input type="text" name="dbName" /> *
<p>数据库端口:<input type="text" name="dbPort" value="3306" /> *
<p>需要替换的关键字:<input type="text" name="keywords" /> *
<p>替换成什么关键字:<input type="text" name="result_keywords" />
<p><span>注意:此操作不可撤销,进入下一步之前,请您先备份将要执行替换操作的数据库,如果您进入下一步,造成的任何后果,作者不承担任何责任,此源码仅用于学习交流,请勿用于任何商业使用</san>
<p><input type="submit" name="button" id="button" value=" 开始替换 " style="margin-left:90px;margin-top:30px;"/>
</form>
<?php }else if($steps=='detection'){?>
<p>数据库状态:<?=$db['ps']?>
<p>正在替换...
<p>替换完成</p>
<p>共替换:<?=count($replace->queryReplace($queryTable,$keywords,$result_keywords))?>次
<p><a href="?">返回上一步</a></p>
<?php }?>
</div>
</body>
</html>

PHP批量替换MySql数据库中的数据内容的更多相关文章

  1. PHP批量替换MySql数据库中的数据内容(替换MySql数据库内容源码)

    PHP批量替换MySql数据库内容 UTF-8 1.0版 <?php //声明 //1.本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更 ...

  2. mysql数据库中插入数据INSERT INTO SET的优势

    往mysql数据库中插入数据.以前常用 INSERT INTO 表名 (列名1,列名2…) VALUES(列值1,列值2); 如果在PHP程序中,就会写成如下示例(往商品库里增加商品) $sql = ...

  3. 使用sqoop将MySQL数据库中的数据导入Hbase

    使用sqoop将MySQL数据库中的数据导入Hbase 前提:安装好 sqoop.hbase. 下载jbdc驱动:mysql-connector-java-5.1.10.jar 将 mysql-con ...

  4. python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图

    python制作简单excel统计报表3之将mysql数据库中的数据导入excel模板并生成统计图 # coding=utf-8 from openpyxl import load_workbook ...

  5. JDBC Java 程序从 MySQL 数据库中读取数据,并备份到 xml 文档中

    MySQL 版本:Server version: 5.7.17-log MySQL Community Server (GPL) 相关内容:JDBC Java 程序从 MySQL 数据库中读取数据,并 ...

  6. 使用grabit分析mysql数据库中的数据血缘关系

    使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...

  7. Solr 07 - Solr从MySQL数据库中导入数据 (Solr DIH的使用示例)

    目录 1 加入数据导入处理器的jar包 2 加入数据库驱动包 3 配置solrconfig.xml文件 3.1 配置lib标签 - 加入驱动jar包 3.2 配置requestHandler标签 - ...

  8. php从mysql数据库中取数据

    php从数据库中取数据  面向过程 <?php $server_name="localhost:3306"; //数据库服务器名称 $username="root& ...

  9. python往mysql数据库中写入数据和更新插入数据

    本文链接:https://blog.csdn.net/Mr__lqy/article/details/85719603 1. 连接mysql import pymysql db = pymysql.c ...

随机推荐

  1. Ubuntu环境安装Gradle

    AndroidStudio使用全新的构建系列—–Gradle. 这是官方为什么使用gradle 的理由: Domain Specific Language (DSL) to describe and ...

  2. Android——Intent,Bundle

    Intent——切换activity intent.setClass(first.this,second.class); startActivity(intent); Bundle——切换时数据传递 ...

  3. 如何在vue2.0项目中引用element-ui和echart.js

    1 项目中怎样添加elment-ui 和 echart.js 1.1直接在packjson 里面的 dependencies 配置 "element-ui": "^1.3 ...

  4. JAVA 线程状态转换图示及说明

    线程状态类型 新建状态(New):新创建了一个线程对象. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中,变得可运行,等待获取C ...

  5. JSON、JSONP、XML的区别

    这两天看jquery手册的时候看到了jsonp.发现手册把jsonp与json放在一起讲解了,所以想写篇文章 梳理一下这三者的关系. jsonp: jsonp是json的一种“使用模式”,可以让网页从 ...

  6. 【洛谷P1983】车站分级

    车站分级 题目链接 首先,可以发现火车停靠站点的大小是没有什么规律的, 火车可以停靠在级别<=当前级别的站点,必须停靠在级别>=当前最高级别的站点 但是所有没有被停靠的站点级别一定比所有被 ...

  7. FileUpload框架实现文件上传(多个文件)和下载

    一.文件上传: 对于大文件执行下面的代码之间卡死 package com.example.web.service.servlet; import java.io.File; import java.i ...

  8. grunt_beginner

    前端集成解决方案:一套包含框架 和 工具,便于开发者快速构建美丽实用的web应用程序的工作流,同时 这套工作流必须是稳健强壮的. Yeman Bower web包管理器 框架.库.公共部分 Grunt ...

  9. android(eclipse)广播机制知识梳理(三)

    1:分类:   标准广播:没有先后顺序,无法被截断   有序广播:又先后顺序,可以截断 2:接收广播:首先进行注册,注册的方式有静态注册和动态注册.也就是在代码中注册和在AndroidManifest ...

  10. some small knowledge

    cookie 增查 <!--1.语义化标签的作用--> <!--1.1 从开发角度考虑是提高代码的可读性可维护性--> <!--1.2 网站的发布者:seo 搜索引擎优化 ...