php sql 类似 mybatis 传参
2015-11-21 23:07
417 查看
PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便,
楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装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); } ?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
- php xml 入门学习资料