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