php多个参数绑定,多次使用绑定参数

我创建了两个函数来通过重命名重复使用的术语来解决该问题。一种用于重命名SQL,另一种用于重命名绑定。

/**

* Changes double bindings to seperate ones appended with numbers in bindings array

* example: :term will become :term_1, :term_2, .. when used multiple times.

*

* @param string $pstrSql

* @param array $paBindings

* @return array

*/

private function prepareParamtersForMultipleBindings($pstrSql, array $paBindings = array())

{

foreach($paBindings as $lstrBinding => $lmValue)

{

// $lnTermCount= substr_count($pstrSql, ':'.$lstrBinding);

preg_match_all("/:".$lstrBinding."\b/", $pstrSql, $laMatches);

$lnTermCount= (isset($laMatches[0])) ? count($laMatches[0]) : 0;

if($lnTermCount > 1)

{

for($lnIndex = 1; $lnIndex <= $lnTermCount; $lnIndex++)

{

$paBindings[$lstrBinding.'_'.$lnIndex] = $lmValue;

}

unset($paBindings[$lstrBinding]);

}

}

return $paBindings;

}

/**

* Changes double bindings to seperate ones appended with numbers in SQL string

* example: :term will become :term_1, :term_2, .. when used multiple times.

*

* @param string $pstrSql

* @param array $paBindings

* @return string

*/

private function prepareSqlForMultipleBindings($pstrSql, array $paBindings = array())

{

foreach($paBindings as $lstrBinding => $lmValue)

{

// $lnTermCount= substr_count($pstrSql, ':'.$lstrBinding);

preg_match_all("/:".$lstrBinding."\b/", $pstrSql, $laMatches);

$lnTermCount= (isset($laMatches[0])) ? count($laMatches[0]) : 0;

if($lnTermCount > 1)

{

$lnCount= 0;

$pstrSql= preg_replace_callback('(:'.$lstrBinding.'\b)', function($paMatches) use (&$lnCount) {

$lnCount++;

return sprintf("%s_%d", $paMatches[0], $lnCount);

} , $pstrSql, $lnLimit = -1, $lnCount);

}

}

return $pstrSql;

}

用法示例:

$lstrSqlQuery= $this->prepareSqlForMultipleBindings($pstrSqlQuery, $paParameters);

$laParameters= $this->prepareParamtersForMultipleBindings($pstrSqlQuery, $paParameters);

$this->prepare($lstrSqlQuery)->execute($laParameters);

有关变量命名的说明:

p:参数,l:函数

str:字符串中的局部,n:数字,a:数组,m:混合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值