bindValue を使用する必要があります bindParam の代わりに 。
bindParamを使用すると、変数の値ではなく、パラメーターに指定された変数がバインドされます。
したがって、そうする場合:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
実際には、5ではなく6で実行されます。これを行うには、メソッドに変数への参照が必要です。リテラルへの参照を持つことはできないため、これは、bindParamをリテラル(または参照できないもの)で使用できないことを意味します。
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
次に:
$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