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