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

如有疑问,加群交流:646104701

源码运行结果截图:

 

PHP批量替换MySql数据库内容 UTF-8 1.0版

<?php
//声明
//1、本源码开发意图:作者在使用一些CMS建站的时候发现很多CMS把网址写入到数据库了,如果换网址,那么就需要更新数据库中的老网址,如果一个一个修改,很不方便,所以开发此源码,供大家学习或使用;
//2、源码开发者:杨波;
//3、源码开发者联系QQ:773003231;
//4、源码开发者博客:http://www.cnblogs.com/phpyangbo/;
//5、源码开放性:任何人都可以随意更改或使用本源码,本源码为开源并免费使用,不存在版权。

//替换数据库内容类
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版 - 作者:杨波 联系QQ:773003231</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>作者:杨波  联系QQ:773003231  本程序因为编码是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>

本文出自:http://www.cnblogs.com/phpyangbo/p/4904698.html

posted on 2015-10-23 15:30  鱼塘总裁  阅读(3735)  评论(1编辑  收藏  举报