Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中绑定参数的高效循环_Php_Mysql - Fatal编程技术网

PHP中绑定参数的高效循环

PHP中绑定参数的高效循环,php,mysql,Php,Mysql,我试图将未知数量的参数绑定到准备好的PHP/MySQL语句。我尝试了下面的代码。然而,它只适用于具有一定数量参数的查询,我知道必须有一种更有效的方法来实现这一点 switch($numparams){ case 0: @$stmt->bind_param(""); break; case 1:

我试图将未知数量的参数绑定到准备好的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
,而不为switch case循环中的每个变量使用单独的
bind_-param
语句(如上所述)。可能只是没有办法做到这一点,但我觉得应该有办法。如果两者都是这样,我感谢任何帮助

我认为您的解决方案在于调用用户函数数组()

首先,您需要一个类似于“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)));
参考

 $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)));


希望这能帮助你度过难关;)

我认为您需要重新审视您的设计。您的问题完全在于
mysqli
API的麻烦典型的解决方法是调用用户函数数组或椭圆操作符(PHP>=5.6)