Maison >développement back-end >tutoriel php >Pourquoi mysqli_stmt::bind_param() lance-t-il « Paramètre… censé être une référence, valeur donnée » ?
Erreur mysqli bind_param() : transmission de valeurs au lieu de références
L'erreur "Le paramètre 3 de mysqli_stmt::bind_param() devrait être une référence, valeur donnée" se produit lorsque mysqli_stmt::bind_param() reçoit un tableau de valeurs au lieu d'un tableau de références à ces valeurs.
Dans le code PDO fourni :
$params = array(1,"2","3","4");
Le tableau $params contient des valeurs plutôt que des références à celles-ci. valeurs. Pour résoudre ce problème, utilisez & pour créer des références :
$params = array(1,&"2", &"3", &"4");
De même, dans le code POO :
array_unshift($params, $param_type);
Cette ligne ajoute la chaîne $param_type au début du tableau $params, mais il ne crée pas de références aux valeurs des paramètres. Pour créer des références, utilisez le caractère & :
array_unshift($params, $param_type); foreach ($params as $key => $value) { $params[$key] =& $value; }
Dans les versions PHP 5.6 et supérieures, vous pouvez utiliser l'opérateur spread (... ) pour transmettre le tableau $params en tant qu'arguments individuels sans avoir à créer manuellement des références :
mysqli_stmt_bind_param($sql_stmt, $param_type, ...$params); $insert_stmt->bind_param($param_type, ...$params);
En passant des références ou en utilisant l'opérateur spread, vous pouvez vous assurer que mysqli_stmt::bind_param() reçoit un tableau de références aux valeurs des paramètres, résolvant ainsi l'erreur.
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!