php sql 类似 mybatis 传参

来源:互联网 发布:乐视网络电视绿色版 编辑:程序博客网 时间:2024/06/06 08:57

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
原创粉丝点击