Bạn cần sử dụng bindValue thay vì bindParam .
Khi bạn sử dụng bindParam, nó liên kết biến được cung cấp với tham số, không phải giá trị của biến.
Vì vậy, nếu bạn làm:
$x = 5;
$stmt->bindParam(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 6 instead of 5
Nó thực sự được thực thi với 6 chứ không phải 5. Để làm điều này, phương thức phải có một tham chiếu đến biến. Bạn không thể có tham chiếu đến một ký tự, vì vậy điều này có nghĩa là bindParam không thể được sử dụng với ký tự (hoặc bất kỳ thứ gì bạn không thể có tham chiếu đến).
$x = 5;
$stmt->bindValue(1, $x, PDO::PARAM_INT);
$x = 6;
$stmt->execute(); //executes with 5 instead of 6
Sau đó:
$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