Du måste använda bindValue istället för bindParam .
När du använder bindParam binder den variabeln som tillhandahålls till parametern, inte värdet på variabeln.
Så om du gör det:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Den exekveras faktiskt med 6 snarare än 5. För att göra detta måste metoden ha en referens till variabeln. Du kan inte ha en referens till en bokstavlig, så detta betyder att bindParam inte kan användas med bokstaver (eller något som du inte kan ha en referens till).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Sedan:
$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