我不知道为什么,但这不起作用。
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
数组。那么第一个参数是一个字符串,而不再是一个数组。
答案 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;
}