首頁 > 後端開發 > 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
發布: 2024-12-01 14:04:10
原創
1041 人瀏覽過

How to Resolve the

mysqli bind_param() 參數引用錯誤:使用RefValues 函數解析

為什麼我收到錯誤「myi_stmt::bind_param(::bind_param()::bind_param()::bind_param()::bind_param()::bind_param()::bind個參考,給定值」?

錯誤當您嘗試將變數或值按值傳遞給需要引用的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板