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 » ?

Pourquoi mysqli_stmt::bind_param() lance-t-il « Paramètre… censé être une référence, valeur donnée » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 09:11:15688parcourir

Why Does mysqli_stmt::bind_param() Throw

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.

Code PDO

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");

Code POO

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;
}

Solution alternative utilisant l'opérateur Spread (PHP 5.6)

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!

Déclaration:
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