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中文網其他相關文章!