PDO Unterschied zwischen bindParam und bindValue

Ich bin vor ein paar Tagen auf ein merkwürdiges Verhalten zwischen bindParam und bindValue bei prepared Statements bei PDO gestoßen. Bei der Verwendung von bindParam wird nur eine Referenz auf die Variable an das Statement gebunden.

Das spätere ändern des Variablenwertes führt dazu, dass auch das ausgeführte Statement einen anderen Wert bekommt. Ein kleines Beispiel welches ich auf http://stackoverflow.com/questions/1179874/what-is-the-difference-between-bindparam-and-bindvalue gefunden habe:

$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindParam(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'female'
$sex = 'male';
$s = $dbh->prepare('SELECT name FROM students WHERE sex = :sex');
$s->bindValue(':sex', $sex); // use bindParam to bind the variable
$sex = 'female';
$s->execute(); // executed with WHERE sex = 'male'

Dieser kleine Unterschied hat mich ganz schön Nerven gekostet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.