【问题标题】:PHP - notice: Array to string conversion on call_user_func_arrayPHP - 注意:call_user_func_array 上的数组到字符串转换
【发布时间】:2017-08-24 12:24:28
【问题描述】:
Notice : Array to string conversion

每次我尝试打电话时

call_user_func_array ("mysqli_stmt_bind_param", array_merge (array ($stmt, 
$types),refValues ($params_array)))

$param_array 包含参数值,函数 refValues 返回此数组的引用

例如,如果我执行此请求 insert into table1(column1) values(value1) Column1 的值将是 'Array'。

我不确定这里有什么问题,有人说通知意味着我的数组里面包含一个数组,有人说这个数组不是数组 我很困惑

这是代码示例

$_POST["params"] 包含类似的类型和参数 "{type1:value1}{type2:value2}"

    $ps = mysqli_prepare($cn,base64_decode($nq));
    $params = $_POST["params"];
    $params_array = array();
    $types ="";
    while(strlen($params)>0)
    {
    try
    {
        $n1 = strpos($params,"{");
        $n2 = strpos($params,"}");

        $param = substr($params,$n1+1,$n2-($n1+1));

        $param_exploded = explode(":",$param);
        $type = $param_exploded[0];
        $types.=$type;
        echo "$type \n";
        $param_ex = $param_exploded[1];
        echo "$param_ex \n";
        $param_ex = str_replace(array("&bg","&sp","&en"),array("{",":","}"),$param_exploded);
        array_push($params_array,$param_ex);

        if($n2+1>=strlen($params))
            break;
        $params = substr($params,$n2+1);
        }catch(Exception $x)
        {

            break;
        }
    }
    call_user_func_array("mysqli_stmt_bind_param",array_merge(array($ps),array($types),refValues($params_array)));
    mysqli_stmt_execute($ps);

mysqli_close($cn);

【问题讨论】:

  • 请展示一个完整的例子,而不是期望人们根据你模糊的口头描述知道到底发生了什么。
  • @CBroe 好的,等等,兄弟
  • @CBroe 更新了看看 :)
  • @AbraCadaver 那不是我说的数组看看代码

标签: php arrays mysqli callback bindparam


【解决方案1】:

正如您所说,您发送的某些数据可能类型错误。您是否尝试过打印 array_merge() 返回的内容?也许参数没有按正确的顺序传递。

无论如何,你为什么不尝试直接使用函数,你可以选择传递参数的顺序?

大概是这样的吧?

$aParams = refValues($params_array);
mysqli_stmt_bind_param($ps, $types, ...$aParams);

如果您不熟悉 splat,...$aParams 会分解数组并将其替换为其中的每个值,将 $aParam 的每个值作为参数传递给函数,这当然是 call_user_func_array() 无论如何进行的方式.

【讨论】:

  • 很高兴知道!由于没有问题,我们的 cmets 不再相关。我将删除我的并建议您也这样做。此外,如果您的问题得到解决,您应该花点时间选择最适合您的问题的答案,以免将来登陆此页面的人浪费时间。
【解决方案2】:

很抱歉,我总是在我的代码中出错并认为这是别的东西哈哈。

错误在这一行:

$param_ex = str_replace(array("&bg","&sp","&en"),array("{",":","}"),$param_exploded);

看看$param_exploded应该是$param_exploded[1]

$param_ex = str_replace(array("&bg","&sp","&en"),array("{",":","}"),$param_exploded[1]);

对不起各位:)

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多