Algumas diferenças práticas entre PDO bindParam e bindValue

image_pdfimage_print

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

Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!