Anda perlu menggunakan bindValue alih-alih bindParam .
Saat Anda menggunakan bindParam, itu mengikat variabel yang diberikan ke parameter, bukan nilai variabel.
Jadi, jika Anda melakukannya:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Ini sebenarnya dieksekusi dengan 6 daripada 5. Untuk melakukan ini, metode harus memiliki referensi ke variabel. Anda tidak dapat memiliki referensi ke literal, jadi ini berarti bahwa bindParam tidak dapat digunakan dengan literal (atau apa pun yang Anda tidak dapat memiliki referensi).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Kemudian:
$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