Musisz użyć bindValue zamiast bindParam .
Kiedy używasz bindParam, wiąże dostarczoną zmienną z parametrem, a nie wartością zmiennej.
Tak więc, jeśli to zrobisz:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
W rzeczywistości jest wykonywany z 6 zamiast 5. Aby to zrobić, metoda musi mieć odwołanie do zmiennej. Nie możesz mieć odniesienia do literału, co oznacza, że bindParam nie może być używany z literałami (ani niczym, do czego nie możesz mieć odniesienia).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Następnie:
$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