gpt4 book ai didi

php - 在 PHP 中绑定(bind)参数的高效循环

转载 作者:行者123 更新时间:2023-11-29 07:39:05 24 4
gpt4 key购买 nike

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

最佳答案

我认为您的解决方案在于 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

希望这对您有所帮助 ;)

关于php - 在 PHP 中绑定(bind)参数的高效循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47367156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com