Maison >base de données >tutoriel mysql >Pourquoi « bindParam » échoue-t-il avec les constantes et comment puis-je utiliser « bindValue » à la place ?

Pourquoi « bindParam » échoue-t-il avec les constantes et comment puis-je utiliser « bindValue » à la place ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 02:17:08844parcourir

Why Does `bindParam` Fail with Constants and How Can I Use `bindValue` Instead?

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!

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