• 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);
    	}
    	
    ?>


  • 相关阅读:
    Linux 设置core dump
    ffmpeg取rtsp流时av_read_frame阻塞的解决办法
    Qt 防多开
    Linux环境中Qt程序的手工发布
    [技术选型] SSH/SSI框架替代品
    [maven] settings 文件 国内镜像站
    [Intellij] 在IntelliJ IDEA 中创建运行web项目
    [Intellij] Intellij IDEA 使用中遇见的问题
    [spark 快速大数据分析读书笔记] 第一章 导论
    [hbase] 查询数据
  • 原文地址:https://www.cnblogs.com/moonciki/p/8145844.html
Copyright © 2020-2023  润新知