【问题标题】:Is there a way to bind an array to mysqli prepare [duplicate]有没有办法将数组绑定到mysqli准备[重复]
【发布时间】:2010-09-21 19:14:38
【问题描述】:

我正在尝试创建一个类,该类将执行具有任意数量变量的多个存储过程中的任何一个

我正在使用 php 和 mysqli

  • 我的类枚举一个数组并根据元素的数量构造一个字符串(如果有)
  • 例如给CALL spTestLogin(?,?)这样的东西
  • 我现在需要使用类似这样的方法绑定数组中的输入:

    $stmt->bind_param($this->paramTypes,$this->paramValues);//paramValues 是我的数组

如果可行,我可以努力获得我的结果

任何想法

【问题讨论】:

    标签: php mysql stored-procedures mysqli


    【解决方案1】:

    你必须这样做:

    $params=array_merge(
        array($this->paramTypes), 
        $this->paramValues
    );
    call_user_func_array(array($stmt, 'bind_param'), $params);
    

    鉴于$this->paramTypesmysqli_stmt::bind_param 所需格式的字符串 - 如果不是,您必须先创建此string 参数。

    我不知道outinout 参数在这种情况下是否有效。

    【讨论】:

      【解决方案2】:

      mysqli_stmt::bind_param() 将接受可变数量的参数

      假设 $this->paramTypes 也是一个数组,其中包含每个变量的正确类型字符('i'、'd'、's'、'b' 之一),您可以执行类似的操作

      $params = $this->paramValues;
      array_unshift($params, implode($this->paramTypes));
      call_user_func_array( array( $stmt, 'bind_param' ), $params);
      

      基本上,您创建一个通常会传递给 bind_param() 的参数数组,然后使用 call_user_func_array() 进行调用

      可能有更好的方法来做到这一点

      编辑:刚刚意识到我在写这篇文章时被打败了,我现在把这个答案留在这里以防万一

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        • 2019-12-25
        • 2016-04-15
        • 2012-07-07
        • 1970-01-01
        • 2010-12-19
        相关资源
        最近更新 更多