PHP 检索整个数据库 所有表 所有字段 包含某个关键字

场景

刚刚在项目中用到了删除包含某个关键字内容,需要检索整个数据库的所有表、所有字段的值。这里记录一下PHP的方法。

思路

  • 分析数据库结构,然后将所有varchar类型的字段取出来
  • or 语句拼接所有可用字段,并搜索关键词
  • 打印出对应的表的对应字段

PHP代码实例

function search_all_db( $search_key ){
	$tables = db_sql_query("show tables");
	foreach($tables as $t){
		sort($t);
		$all_tables[] = $t[0];
	}
	foreach($all_tables as $t){
		$columns = db_sql_query("show columns from $t");
		$columns_arr = array();
		foreach($columns as $c){
			if(substr($c['Type'], 0, 7) != 'varchar'){continue;}
			$columns_arr[] = '`' . $c['Field'] . '`' . " like '%$search_key%'";

		}
		if(empty($columns_arr)){continue;}
		$sql = "SELECT * from $t where " . implode(' or ', $columns_arr);
		$rs = db_sql_query($sql);
		//echo $sql . "</br>";
		if($rs){
			$and_arr = array();
			foreach($columns_arr as $c){
				$sql = "SELECT * from $t where $c";
				$s = db_sql_query($sql);
				if($s){
					$and_arr[] = str_replace(' like ', ' not like ', $c);
					//echo $sql . "</br>";
				}
			}
			
			if(!empty($and_arr)){
				$sql = "SELECT * from $t where " . implode(' and ', $and_arr);
				$s = db_sql_query($sql);
				if(!empty($s)){
					echo str_replace('SELECT *', 'DELETE', $sql) . ";</br>";
				}
			}
			//echo $sql . "</br>";
		}else{
			//echo $t . "</br>";
		}
	}

	//print_r($all_tables);
}
search_all_db();

db_sql_query 为查询数据库的方法类,这里不做详细说明。使用时请自行修改代码。

搬瓦工,CN2高速线路,1GB带宽,电信联通优化KVM,延迟低,速度快,建站稳定,搬瓦工BandwagonHost VPS优惠码BWH26FXH3HIQ,支持<支付宝> 【点击购买】!

Vultr$3.5日本节点,512M内存/500G流量/1G带宽,电信联通优化,延迟低,速度快【点击购买】!

腾讯云云产品精选秒杀【点击购买】

阿里云香港、新加坡VPS/1核/1G/25G SSD/1T流量/30M带宽/年付¥288【点击购买】

百度云不止一折优惠【点击购买】

发表评论

电子邮件地址不会被公开。 必填项已用*标注