Heim >Backend-Entwicklung >PHP-Tutorial >Wie behebe ich den Fehler „mysqli_stmt::bind_param() Expected a Reference'?
Behebung des Fehlers „mysqli bind_param() Expected a Reference“
Beim Auftreten des Fehlers „Parameter 3 to mysqli_stmt::bind_param()“ „Es wird erwartet, dass es sich um eine Referenz handelt, der Wert ist angegeben“, weist dies darauf hin, dass das Array „$params“ nicht ordnungsgemäß für die Bindung konfiguriert ist. Um dieses Problem zu lösen, ist es wichtig, die Anforderungen für mysqli_stmt_bind_param() zu verstehen.
Der Fehler tritt auf, weil mysqli_stmt_bind_param() erwartet, dass die Parameter als Referenz übergeben werden. Das Array $params enthält jedoch Wertkopien, bei denen es sich nicht um Referenzen handelt. Um dies zu korrigieren, müssen Sie die Werte in $params mit der folgenden Methode in Referenzen konvertieren:
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; }
Sobald das $params-Array Referenzen auf die Werte enthält, können Sie die Parameter wie folgt korrekt binden Code:
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();
Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „mysqli_stmt::bind_param() Expected a Reference'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!