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

标签 php mysql

我正在尝试将未知数量的参数绑定(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/

相关文章:

mysql - 如何使用带有密码的 rake 数据库命令

C# MySQL 执行 UPDATE 什么都不做

MySQL SELECT 查询返回错误结果

javascript - AJAX 上传 Web 应用程序

php - 这个 Laravel 路由声明到底意味着什么?

php - 在 pgp 脚本中使用 Imagemagick 以正确的格式保存图像

MySQL锁等待超时和死锁错误

php - 使用具有不同间隔的 JavaScript 计时器更改 div 样式

php - 我应该如何为 SO 和 yahoo 答案这样的用户创建一个积分系统?(PHP)

java转mysql jdbc连接问题