我正在尝试将未知数量的参数绑定到准备好的PHP / MySQL语句中。我试过下面的代码。但是,它只适用于具有一定数量参数的查询,我知道必须有一种更有效的方法。
switch($numparams){
case 0:
@$stmt->bind_param("");
break;
case 1:
@$stmt->bind_param($paramtypes, $param_arr0);
break;
case 2:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1);
break;
case 3:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2);
break;
case 4:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3);
break;
case 5:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4);
break;
case 6:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4,$param_arr5);
break;
case 7:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4,$param_arr5,$param_arr6);
break;
case 8:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4,$param_arr5,$param_arr6,$param_arr7);
break;
case 9:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4,$param_arr5,$param_arr6,$param_arr7,$param_arr8);
break;
case 10:
@$stmt->bind_param($paramtypes, $param_arr0,$param_arr1,$param_arr2,$param_arr3,$param_arr4,$param_arr5,$param_arr6,$param_arr7,$param_arr8,$param9);
break;
}
正如您所看到的,编码效率非常低,而且不具备可扩展性。
我尝试根据参数的数量在for循环中动态命名变量,但是我无法弄清楚如何将它们插入到bind_param
中而没有为每个参数添加单独的bind_param
语句开关盒环(如上所述)。可能只是没有办法做到这一点,但我觉得应该有一个。如果是这种情况,我感谢任何帮助。
答案 0 :(得分:1)
我认为您的解决方案在于 call_user_func_array()数组。
首先你需要一个类似于“ssi ....”的字符串,它是顺序的参数类型。
<强>代码强>
$types = '';
foreach($param_arr as $param) {
$types.= substr(strtolower(gettype($param)), 0, 1);
}
call_user_func_array(array($stmt, 'bind_param'), array_merge(array($types), $param_arr)));
<强>参考强>
http://www.pontikis.net/blog/dynamically-bind_param-array-mysqli http://php.net/manual/en/function.call-user-func-array.php
希望这可以帮助您度过;)