Réponses
Trop de publicités?De la saisie manuelle pour `` :
[Par
] Contrairement à
, la variable est liée comme référence et seront seulement évaluées au moment que `` est appelée.
Ainsi, par exemple :
ou
Voici quelques je pense :
- Avec
bindParam
, vous ne pouvez passer des variables ; non pas les valeurs - avec
bindValue
, vous pouvez passer les deux (valeurs, évidemment, et les variables) -
bindParam
fonctionne uniquement avec des variables, car elle permet des paramètres donnés en entrée/sortie, par "référence" (et une valeur n'est pas valide "référence" en PHP) : il est utile avec les pilotes (citant le manuel) :
le soutien de l'invocation de l'stockées les procédures de retour des données de sortie paramètres, et certains aussi d'entrée/sortie les paramètres à la fois d'envoyer dans les données et sont mises à jour pour la recevoir.
Avec certains moteurs de base de données, procédures stockées peuvent avoir des paramètres qui peuvent être utilisés aussi bien en entrée (ce qui donne une valeur à partir de PHP à la procédure) et de sortie (retour d'une valeur à partir de la procédure stockée à PHP) ; de lier ces paramètres, vous devez utiliser bindParam, et pas bindValue.
La réponse est dans la documentation pour l' bindParam
:
Contrairement à la méthode PDOStatement::bindValue(), la variable est lié à titre de référence et ne seront évalués au moment de PDOStatement::execute() est appelée.
Et execute
appel de la méthode PDOStatement::bindParam() pour lier des variables PHP pour les marqueurs de paramètres: les variables liées à transmettre leur valeur d'entrée et de recevoir la valeur de sortie, le cas échéant, de leurs associés des marqueurs de paramètres
Pour la plupart d'un but commun, vous devez utiliser bindValue
.
bindParam
a deux délicate ou des comportements inattendus:
-
bindParam(':foo', 4, PDO::PARAM_INT)
ne fonctionne pas, car il nécessite le passage d'un variable (comme référence). -
bindParam(':foo', $value, PDO::PARAM_INT)
changera$value
de la chaîne après l'exécution de l'execute()
. Ceci, bien sûr, peut conduire à des bogues qui pourraient être difficiles à attraper.
Source: http://php.net/manual/en/pdostatement.bindparam.php#94711