【问题标题】:How to passing an array to the bind_param method as an argument in oop如何将数组作为 oop 中的参数传递给 bind_param 方法
【发布时间】:2018-11-06 21:15:32
【问题描述】:

当我想将数组传递给 bind_param 方法时,出现如下错误。

警告:call_user_func_array() 期望参数 1 是有效的回调,第一个数组成员不是 C:\xampp\htdocs\mvc\libs\Database.php 第 26 行中的有效类名或对象

代码如下:

class Database extends mysqli {

    function __construct($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME) {
        parent::__construct($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
    }

    function insert($table, $data){

        echo $table . '<br />';
        print_r($data);
        echo '<br />';        
        $param_types=$this->gettypes_bind_param($data, $keys, $values, $place_holder);
        $field_names= implode(', ', $keys);
        $inputArray[]=&$param_types;
        $j= count($values);
        for ($i=0;$i<$j;$i++)
        {
            $inputArray[]=&$values[$i];
        }

        print_r($inputArray); 
        echo '<br />';
        $result= $this->prepare("INSERT INTO $table ($field_names) VALUES ($place_holder)");
        call_user_func_array(array($result, 'bind_param'), $inputArray);
        $result->execute();
        die;
    }

    function gettypes_bind_param(&$data, &$keys, &$values, &$place_holder){
        $types='';
        foreach ($data as $tmp)
        {
            switch (gettype($tmp))
            {
                case "string" :
                    $types.='s';
                    break;
                case "integer" :
                    $types.='i';
                    break;                
                case "double" :
                    $types.='d';
                    break;                
                default :
                    $types.='b';
                    break;                
            }
            $place_holder .='?, ';
        }
        $place_holder= rtrim($place_holder, ', ');
        $keys = array_keys($data);
        $values = array_values($data);
        return $types;
    }

对不起,我的英语

【问题讨论】:

标签: php mysqli


【解决方案1】:

您可以使用Argument unpacking (...) 运算符...

$result->bind_param ($param_types, ...$values);

请注意,您将类型和值作为单独的项目传递,而不必像在 call_user_func_array() 中那样加入它们。

【讨论】:

  • 非常非常感谢:)
猜你喜欢
  • 2013-09-07
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多