php sql 传参数,php sql 类似 mybatis 传参

PHP sql 处理上,没有类似于 java mybatis 的工具,导致进行一些sql 处理时,会有诸多不便,

楼主抽时间写了一个 php 类似 mybatis 的sql 工具,省去了拼装sql 的时间

代码如下

$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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值