在PHP中绑定参数的高效循环

时间:2017-11-18 14:29:02

标签: php mysql

我正在尝试将未知数量的参数绑定到准备好的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语句开关盒环(如上所述)。可能只是没有办法做到这一点,但我觉得应该有一个。如果是这种情况,我感谢任何帮助。

1 个答案:

答案 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

希望这可以帮助您度过;)