Du skal bruge bindValue i stedet for bindParam .
Når du bruger bindParam, binder den den angivne variabel til parameteren, ikke værdien af variablen.
Så hvis du gør det:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Den udføres faktisk med 6 i stedet for 5. For at gøre dette skal metoden have en reference til variablen. Du kan ikke have en reference til en bogstavelig, så det betyder, at bindParam ikke kan bruges med bogstaver (eller noget, du ikke kan have en reference til).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Så:
$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