mysqli_stmt :: bind_param()期望参数1为字符串,给定数组

时间:2017-06-20 11:19:02

标签: php mysqli

我不知道为什么,但这不起作用。

array_unshift($params,$types);
if($stmt = $conn->prepare($sql)){
  call_user_func_array(array($stmt, 'bind_param'), refValues($params));

  $stmt->execute();

现在说:

  

警告:mysqli_stmt :: bind_param()期望参数1为字符串,给定数组...

这个代码有什么问题?

function refValues($arr){
if(strnatcmp(phpversion(),'5.3') >= 0){ //Reference is required for PHP 5.3
    $refs = array();
    foreach($arr as $key => $value){
        $refs[$key] = &$arr[$key];
    }
    return $refs;
}
return $arr;
}

refValues的print_r($ params);

Array ( [0] => Array ( [0] => i [1] => i [2] => i [3] => i [4] => i [5] => i [6] => i [7] => i [8] => i [9] => s [10] => i [11] => i [12] => i [13] => i [14] => i [15] => i [16] => i [17] => i [18] => i [19] => i [20] => i [21] => i ) [1] => 1 [2] => 0 [3] => 0 [4] => 0 [5] => 0 [6] => 0 [7] => 0 [8] => 1241 [9] => [10] => [11] => 1 [12] => [13] => [14] => [15] => 432 [16] => 243 [17] => 0 [18] => 0 [19] => 0 [20] => 0 [21] => 0 [22] => 78 ) 

这是解决方案: 我只需要破坏$types数组。那么第一个参数是一个字符串,而不再是一个数组。

1 个答案:

答案 0 :(得分:0)

我不知道$params内有什么,但mysqli_stmt::bind_param期望引用第二个和以下参数。

  

bool mysqli_stmt :: bind_param(string $ types,mixed& $ var1 [,mixed& $ ...])

来源:Doc: mysqli_stmt::bind_param

所以你必须将数组值更改为引用。 例如:

$params = array(&$var1, &$var2, &$var3);

如果您的数组是动态的,请使用以下函数进行转换:

function arrayToRef(&$rawArray)
{ 
    $refArray = array(); 
    foreach($rawArray as $key => $value) 
    {
        $refArray[$key] = &$rawArray[$key];
    }
    return $refArray; 
}