Comprendre la distinction entre bindParam et bindValue
Question :
Quelle est la différence fondamentale entre PDOStatement::bindParam() et PDOStatement::bindValue()?
Réponse :
Selon l'entrée manuelle PDOStatement::bindParam, la distinction clé réside dans le comportement de référencement des deux méthodes. bindParam lie les variables en tant que références, tandis que bindValue lie les valeurs des variables. Ce comportement de référencement entre en jeu lors de l'exécution de PDOStatement::execute().
bindParam Exemple :
Considérez le code suivant :
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindParam(':sex', $sex); // bind the variable using bindParam $sex = 'female'; $s->execute(); // execute with WHERE sex = 'female'
Ici, bindParam lie $sex comme référence. Lorsque l'instruction s'exécute, elle fait référence à la valeur actuelle de $sex, qui est devenue « femelle ». Par conséquent, la requête récupérera les résultats pour les étudiantes « féminines ».
Exemple de bindValue :
Examinons maintenant un exemple similaire utilisant bindValue :
$sex = 'male'; $s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex'); $s->bindValue(':sex', $sex); // bind the variable's value using bindValue $sex = 'female'; $s->execute(); // execute with WHERE sex = 'male'
Dans ce cas, bindValue lie la valeur de $sex au moment de la liaison, qui est « mâle ». Ainsi, la requête récupérera toujours les résultats pour les étudiants « de sexe masculin », même si la valeur de $sex est modifiée ultérieurement. Cela démontre le comportement de non-référencement de bindValue.
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!