É 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.




