Maison > développement back-end > tutoriel php > Comment résoudre l'erreur « mysqli_stmt::bind_param() censée être une référence, valeur donnée » ?

Comment résoudre l'erreur « mysqli_stmt::bind_param() censée être une référence, valeur donnée » ?

Susan Sarandon
Libérer: 2024-12-01 14:04:10
original
988 Les gens l'ont consulté

How to Resolve the

Erreur de référence de paramètre mysqli bind_param() : résolution avec la fonction RefValues

Pourquoi est-ce que je reçois l'erreur "mysqli_stmt::bind_param() attendue être une référence, valeur donnée" ?

L'erreur "mysqli_stmt::bind_param() devrait être une référence, valeur donnée" se produit lorsque vous essayez de transmettre une variable ou une valeur par valeur à la méthode bind_param(), qui attend une référence. Ce problème peut survenir lors de l'utilisation de call_user_func_array() pour transmettre plusieurs paramètres à bind_param().

Comprendre le problème

Les fonctions MySQL, y compris bind_param(), nécessitent que les variables soient transmises comme références pour des performances optimales. Cependant, call_user_func_array() attend des paramètres comme valeurs. Cette inadéquation des attentes conduit à l'erreur.

Solution : Utilisation de la fonction RefValues()

Pour résoudre ce problème, vous pouvez utiliser la fonction refValues(), qui convertit un tableau de valeurs dans un tableau de références. Voici un exemple :

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);
Copier après la connexion

Solution alternative : utilisation de l'opérateur Spread

Dans les versions plus récentes de PHP, vous pouvez utiliser l'opérateur spread (...) pour convertir un tableau de valeurs dans un tableau de références. Voici un exemple :

$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);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal