Sie müssen bindValue verwenden statt bindParam .
Wenn Sie bindParam verwenden, bindet es die bereitgestellte Variable an den Parameter, nicht den Wert der Variablen.
Also, wenn Sie das tun:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Es wird tatsächlich mit 6 statt mit 5 ausgeführt. Dazu muss die Methode eine Referenz auf die Variable haben. Sie können keinen Verweis auf ein Literal haben, das bedeutet also, dass bindParam nicht mit Literalen verwendet werden kann (oder irgendetwas, auf das Sie keinen Verweis haben können).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Dann:
$stmt->bindParam(1, 1, PDO::PARAM_INT);
//invalid because there's no way to pass a literal 1 by reference
$stmt->bindValue(1, 1, PDO::PARAM_INT);
//valid