【发布时间】:2017-06-17 19:22:00
【问题描述】:
我知道我们必须将引用传递给mysqli_stmt_bind_param。我正在做以下事情
$ref = refValues($data);
function refValues($arr){
$refs = array();
foreach($arr as $key => $value)
$refs[$key] = &$arr[$key];
var_dump(implode(",", $refs));
return $refs;
return $arr;
}
我将所有值都放在一个数组中。我正在使用上述函数来获取参考。 Got the above answer from SO
我的 PHP 版本是 5.6
我正在通过以下方式绑定参数。
mysqli_stmt_bind_param($stmt, $types, $ref);
$stmt 是通过mysqli_prepare 创建的语句。它返回错误号 0。
$types 只不过是$types = str_pad('',count($data),'s');
我也验证了$types 数据。它返回预期的类型数量。即ssssssss
如果我执行,我会收到以下错误。
Only variables should be passed by reference in test.php
我在 SO 中找到了this 解决方案。我不能分配 100 个变量。我不认为这是可行的。
我发现另一种选择是call_user_func_arrary。
$values = refValues($data);
call_user_func_array(array($stmt, 'bind_param'), $values);
它返回number of bind type doesn't match number of values。这对我来说很奇怪。我已经验证了数组和值。两个计数是匹配的。我不知道 call_user_func_array 的内部实现。
请告诉我有什么方法可以有效地解决这个问题。
【问题讨论】:
-
嗯,首先,
function refValues($arr){创建了$data的副本 -
@Xorifelse 请查看更新后的链接。 34 票赞成答案。它不会创建引用吗?
-
在您的代码中
$ref是一个包含引用的数组(值)。 -
而
bind_param第一个参数是字符串类型。 -
@u_mulder 是的。我明白那个。谢谢。请让我知道当引用已经存在时,为什么该 func 期望引用?我做错什么了吗?