2017-06-20 52 views
-1

我不知道为什么,但这不起作用。mysqli_stmt :: bind_param()期望参数1是字符串,给定数组[解决]

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($ params)的print_r;

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阵列。所以然后第一个参数是一个字符串,而不是一个数组了。

+0

又是什么使误差不够清楚? – hassan

+0

@hassan哪一个是“参数1”? – pandaNine

+1

@pandaNine'refValues($ params)'。 – BenM

回答

0

我不知道$params里面有什么,但mysqli_stmt::bind_param需要第二个参数和下面的参数。

布尔mysqli_stmt :: bind_param(字符串$类型,混合& $ VAR1 [,混合& $ ...])

来源: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; 
} 
+0

我想动态地绑定这些参数。你的解决方案不能动态工作,不是吗? – pandaNine

+0

您可以转换数组,我将它添加到我的答案 – modsfabio

+0

我使用的函数与您的函数做的一样: 'function refValues($ arr){if(strnatcmp(phpversion(),'5.3')> = 0 ){//引用对于PHP 5是必需的。3 $ refs = array(); foreach($ arr as $ key => $ value){ $ refs [$ key] =&$ arr [$ key]; } return $ refs; } return $ arr; }' 所以错误信息仍然是一样的。 – pandaNine

相关问题