2017-08-24 29 views
-1
Notice : Array to string conversion 

每次我试图打电话给PHP - 通知:数组字符串转换在call_user_func_array

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的值将是'数组'。

我不知道是什么问题在这里有的说是通知的意思是我的数组包含在它里面一个数组,有的说是阵列是不是数组 ,我很困惑

这是代码

$ _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); 
+1

请展示一个完整的示例,而不是基于模糊的口头描述期望人们知道究竟发生了什么。 – CBroe

+0

@CBroe好的等待兄弟 – Th3Wolf

+0

@CBroe更新了看看:) – Th3Wolf

回答

0

如您所说,也许您发送的某些数据类型错误。你有没有试图打印什么array_merge()回报你?也许参数没有按照正确的顺序传递。

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

这样的事情,也许呢?

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

如果你不熟悉的图示,...$aParams爆炸数组,并在它的每一个值替代它,传递$ aParam的每个值作为参数传递给函数,这当然是如何call_user_func_array()收益反正。

+0

好知道!由于没有问题,我们的意见不再相关。我会删除我的,并建议你也这样做。此外,如果你的问题解决了,你应该花一点时间选择适合你的问题的答案,以便将来登陆这个页面的人不会浪费时间。 – ksjohn

0

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

的错误是在这一行:

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

我很对不起你们:)