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