首页 >后端开发 >php教程 >如何解决'mysqli_stmt::bind_param() Expected to be a Reference, Value Give”错误?

如何解决'mysqli_stmt::bind_param() Expected to be a Reference, Value Give”错误?

Susan Sarandon
Susan Sarandon原创
2024-12-01 14:04:101043浏览

How to Resolve the

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn