É comum as pessoas usarem o PDO do PHP, e por vezes não conhecerem diferenças práticas entre o bindParam e o bindValue.
Apresentaremos com um exemplo um
$sexo = 'masculino'; $s = $dbh->prepare('SELECT nome FROM cadastro WHERE sexo = :sexo'); $s->bindValue(':sexo', $sexo); // usado bindValue para vincular o valor da variável $sexo = 'feminino'; $s->execute(); // executado como WHERE sexo = 'masculino' $sexo = 'masculino'; $s = $dbh->prepare('SELECT nome FROM cadastro WHERE sexo = :sexo'); $s->bindParam(':sexo', $sexo); // usado bindParam para vincular a variável $sexo = 'feminino'; $s->execute(); // executado como WHERE sexo = 'feminino'
Isto evidência outra diferença entres as funções que o bindParam recebe a varíavel por referência, enquanto o bindValue utiliza a variável apenas como valor.
Segundo a documentação, existe a possibilidade de alguns bancos de dados alterarem via procedure valores de argumentos recebidos e o bindParam que recebe por referência seria capaz de retornar e alterar estes valores após a execução da procedure pelo banco de dados.