mysqli bind_param() 参数引用错误:使用 RefValues 函数解析
为什么我收到错误“mysqli_stmt::bind_param()预期做个参考,给定值”?
错误当您尝试将变量或值按值传递给需要引用的bind_param()方法时,会出现“mysqli_stmt::bind_param()预期是引用,给定值”。当使用 call_user_func_array() 将多个参数传递给 bind_param() 时,可能会出现此问题。
理解问题
MySQLi 函数,包括 bind_param(),需要传递变量作为最佳性能的参考。但是,call_user_func_array() 需要参数作为值。这种期望不匹配会导致错误。
解决方案:使用 RefValues() 函数
要解决此问题,您可以使用 refValues() 函数,该函数将将值数组转换为引用数组。下面是一个示例:
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; } $query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)"; $params = array(1,"2","3","4"); $param_type = "isss"; $sql_stmt = mysqli_prepare ($mysqli, $query); call_user_func_array('mysqli_stmt_bind_param', array_merge(array($sql_stmt, $param_type), refValues($params))); mysqli_stmt_execute($sql_stmt);
替代解决方案:使用展开运算符
在较新版本的 PHP 中,您可以使用展开运算符 (...) 进行转换将值数组转换为引用数组。这是一个示例:
$query = "INSERT INTO test (id,row1,row2,row3) VALUES (?,?,?,?)"; $params = array(1,"2","3","4"); $param_type = "isss"; $sql_stmt = mysqli_prepare ($mysqli, $query); call_user_func_array([$sql_stmt, 'bind_param'], [$param_type, ...$params]); mysqli_stmt_execute($sql_stmt);
以上是如何解决'mysqli_stmt::bind_param() Expected to be a Reference, Value Give”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!