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