PHP批量替换MySql数据库中的数据内容

<?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>

 

posted @ 2018-05-16 11:53  柠檬没我萌  阅读(2063)  评论(0编辑  收藏  举报