Musíte použít bindValue místo bindParam .
Když použijete bindParam, sváže zadanou proměnnou s parametrem, nikoli s hodnotou proměnné.
Takže, pokud to uděláte:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Ve skutečnosti se provádí s 6 spíše než 5. K tomu musí mít metoda odkaz na proměnnou. Nemůžete mít odkaz na literál, takže to znamená, že bindParam nelze použít s literály (nebo čímkoli, na co nemůžete odkazovat).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Potom:
$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