php sql 类似 mybatis 传参

PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便,

楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的时间

代码如下


<?php 
	$sqlStartTarg = "#{";
	$sqlEndTarg = "}";
	
	/**
	 * 替换 #{key} 部分
	 * Enter description here ...
	 * @param $valuePart
	 * @param $valueArray
	 */
	function replaceValue($valuePart, $valueArray){
		global $sqlStartTarg, $sqlEndTarg;
		
		$resultValue = null;

		$key = str_replace($sqlStartTarg, "", $valuePart);
		$key = str_replace($sqlEndTarg, "", $key);
		
		$key = trim($key);
		
		if(array_key_exists($key, $valueArray)){
			$resultValue = $valueArray[$key];
		}else{
			$resultValue = "NULL_VALUE";
		}
		return $resultValue;
	}
	
	/**
	 *  预处理sql,替换  #{key..} 部分为实际值
	 *  本方法不做特殊字符处理,如遇特殊字符,请自行在传递的值中做处理
	 * Enter description here ...
	 * @param $sql 原始sql
	 * @param $parameter 传递参数数组
	 */
	function preparedSql($sql, $parameter){
		global $sqlStartTarg, $sqlEndTarg;
		
		$resultSql = "";
		
		//为避免参数值包含 #{...} 部分,所以做分组处理
		$lastSql = $sql;
		
		//首先,查询 #{
		while($startIndex = strpos($lastSql, $sqlStartTarg)){//包含参数
			//参数前部分
			$frontPart = substr($lastSql, 0, $startIndex);
			
			//参数部分
			$endIndex = strpos($lastSql, $sqlEndTarg, $startIndex);
			
			if($endIndex){
				//已处理部分
				$valueLength = $endIndex - $startIndex + 1;
				$valuePart = substr($lastSql, $startIndex, $valueLength);
				
				//#{key} 部分
				$value = replaceValue($valuePart, $parameter);
				
				$resultSql .= $frontPart . $value;
				
				//参数后未处理部分
				if($endIndex + 1 >= strlen($lastSql)){
					$lastSql = "";
				}else{ 
					$lastSql = substr($lastSql, $endIndex + 1);
				}
			}else{
				$resultSql .= $lastSql;
				$lastSql = "";
			}
		}
		
		if($lastSql != ""){
			$resultSql.= $lastSql;
		}
		
		return $resultSql;
	}
	
	/**
	 * 正则匹配方式不可取
	 * 有可能参数值中包含  #{**},此时,替换会出现异常
	 * 但此方法保留
	 * Enter description here ...
	 */
	function preparedSql1(){
		$sql = "select user_id, user_name, `password` from `user_info` where password = '#{password}' ";
		$sql .= "and company_name = '#{company_name}' and status = #{status} and comment = '#{comment}' ";
		
		//先找出 sql 中包含的 所有参数
		/*
		$matchArray = array();
		
		$reg = "/\#\{[^\}]*\}/";
		
		preg_match_all($reg, $sql, $matchArray);
		
		$resultJson = json_encode($matchArray);
		//phpAlert($resultJson);
		
		print_r($matchArray);
		echo "$resultJson";
		*/
	}
	
	/**
	 * 测试
	 * Enter description here ...
	 */
	function test_db(){
		$sql = "select user_id, user_name, `password` from `user_info` where password = '#{password}' ";
		$sql .= "and company_name = '#{company_name}' and status = #{status} and comment = '#{comment}' ";
		
		$valueArray = array();
		$valueArray['password'] = "|#{password}|";
		$valueArray['company_name'] = "|company_name|";
		$valueArray['comment'] = "|comment|";
		$valueArray['status'] = "|status|";
		
		$sql = preparedSql($sql, $valueArray);
		
		print_r($sql);
	}
	
?>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值