您的位置:首页 > 编程语言 > PHP开发

php sql 类似 mybatis 传参

2015-11-21 23:07 417 查看
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);
}

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php mybatis