Heim > Backend-Entwicklung > PHP-Tutorial > Wie behebe ich den Fehler „mysqli_stmt::bind_param() Expected to be a Reference, Value Given'?

Wie behebe ich den Fehler „mysqli_stmt::bind_param() Expected to be a Reference, Value Given'?

Susan Sarandon
Freigeben: 2024-12-01 14:04:10
Original
991 Leute haben es durchsucht

How to Resolve the

mysqli bind_param() Parameterreferenzfehler: Auflösen mit RefValues-Funktion

Warum erhalte ich die Fehlermeldung „mysqli_stmt::bind_param() erwartet.“ als Referenz dienen, Wert angegeben“?

Der Fehler „mysqli_stmt::bind_param() wird voraussichtlich eine Referenz sein, Wert angegeben“ tritt auf, wenn Sie versuchen, eine Variable oder einen Wert für jeden Wert an die Methode bind_param() zu übergeben, die eine Referenz erwartet. Dieses Problem kann auftreten, wenn call_user_func_array() verwendet wird, um mehrere Parameter an bind_param() zu übergeben.

Verstehen des Problems

MySQLi-Funktionen, einschließlich bind_param(), erfordern die Übergabe von Variablen als Referenz für optimale Leistung. call_user_func_array() erwartet jedoch Parameter als Werte. Diese Nichtübereinstimmung der Erwartungen führt zum Fehler.

Lösung: Verwendung der Funktion RefValues()

Um dieses Problem zu beheben, können Sie die Funktion refValues() verwenden, die konvertiert ein Array von Werten in ein Array von Referenzen. Hier ist ein Beispiel:

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);
Nach dem Login kopieren

Alternative Lösung: Verwendung des Spread-Operators

In neueren Versionen von PHP können Sie den Spread-Operator (...) zum Konvertieren verwenden ein Array von Werten in ein Array von Referenzen. Hier ist ein Beispiel:

$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);
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie behebe ich den Fehler „mysqli_stmt::bind_param() Expected to be a Reference, Value Given'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage