Maison >base de données >tutoriel mysql >Pourquoi « bindParam » échoue-t-il avec les constantes et comment puis-je utiliser « bindValue » à la place ?
Résolution de l'erreur « Impossible de transmettre le paramètre 2 par référence » lors de l'utilisation de bindParam avec des constantes
Dans votre extrait de code, vous rencontrez l'erreur « Impossible passer le paramètre 2 par référence" lors de la tentative d'utilisation de bindParam avec une valeur constante (par exemple, PDO::PARAM_NULL). Cette erreur se produit car bindParam nécessite une variable à laquelle se lier, pendant que vous transmettez une valeur constante.
Pour résoudre ce problème, vous devez utiliser bindValue au lieu de bindParam. bindValue lie une valeur directement au paramètre, plutôt qu'à une variable. Voici le code corrigé :
try { $dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'"); } catch(PDOException $e) { ... } $stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)'); $stmt->bindValue(':v1', null, PDO::PARAM_INT); // Using bindValue with null and explicit type
Remarque : Vous pourriez être tenté d'utiliser bindValue(':param', null, PDO::PARAM_NULL), mais cette approche ne fonctionne pas toujours . Au lieu de cela, il est recommandé d'utiliser le type explicite, tel que PDO::PARAM_INT dans cet exemple.
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!