首页 > 后端开发 > php教程 > 如何修复'mysqli_stmt::bind_param() Expected a Reference”错误?

如何修复'mysqli_stmt::bind_param() Expected a Reference”错误?

Barbara Streisand
发布: 2024-12-01 17:25:14
原创
524 人浏览过

How to Fix the

解决“mysqli bind_param() Expected a Reference”错误

遇到错误“Parameter 3 to mysqli_stmt::bind_param()”预期是一个参考,给定值”,这表明 $params 数组未正确配置用于绑定。要解决此问题,了解 mysqli_stmt_bind_param() 的要求至关重要。

出现错误是因为 mysqli_stmt_bind_param() 期望参数通过引用传递。但是,$params 数组包含值副本,它们不是引用。要纠正此问题,您必须使用以下方法将 $params 中的值转换为引用:

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;
}
登录后复制

一旦 $params 数组包含对值的引用,您可以使用以下方法正确绑定参数代码:

PDO:

$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);
登录后复制

OOP:

$insert_stmt = $mysqli->prepare($query);
array_unshift($params, $param_type);
call_user_func_array(array($insert_stmt, 'bind_param'), refValues($params));
$insert_stmt->execute();
登录后复制

以上是如何修复'mysqli_stmt::bind_param() Expected a Reference”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板