PHP - 注意:call_user_func_array上的数组到字符串转换

时间:2017-08-24 12:24:28

标签: php arrays mysqli callback bindparam

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);

2 个答案:

答案 0 :(得分:0)

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

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

这样的事,也许?

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

如果你不熟悉splat,...$aParams会爆炸数组并用它中的每个值替换它,将$ aParam的每个值作为参数传递给函数,这肯定是{{1}无论如何都要继续。

答案 1 :(得分:0)

我很抱歉我总是在我的代码中犯错误并认为这是别的哈哈。

错误就在这一行:

1734

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

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

我很抱歉:)