zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    scrollview嵌套listiview(解决高度问题以及两者滚动冲突问题)
    listview通过onscrollListener实现分页加载
    listview中的checkbox实现全选、反选、删除的功能
    【JavaScript】闭包应用之数据独立
    【JavaScript】闭包应用之数据缓存
    【问题:发现与解决】angularJs指令在dijit控件中的使用
    【转发】:CSS代码重构与优化之路
    写一个简易的富文本
    【html/css】若母div设置了透明度,如何才能使得里面的子div不继承母div的透明度
    【html/css】模态框的实现
  • 原文地址:https://www.cnblogs.com/ihuangjianxin/p/9045232.html
Copyright © 2011-2022 走看看