Tôi đã gặp vấn đề tương tự một vài lần và tôi nghĩ rằng tôi đã tìm thấy một giải pháp khá đơn giản và tốt. Trong trường hợp tôi muốn sử dụng các tham số nhiều lần, tôi chỉ cần lưu trữ chúng vào một MySQL User-Defined Variable
.
Điều này làm cho mã dễ đọc hơn nhiều và bạn không cần bất kỳ chức năng bổ sung nào trong PHP:
$sql = "SET @term = :term";
try
{
$stmt = $dbh->prepare($sql);
$stmt->bindValue(":term", "%$term%", PDO::PARAM_STR);
$stmt->execute();
}
catch(PDOException $e)
{
// error handling
}
$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term";
try
{
$stmt = $dbh->prepare($sql);
$stmt->execute();
$stmt->fetchAll();
}
catch(PDOException $e)
{
//error handling
}
Nhược điểm duy nhất có thể là bạn cần thực hiện thêm một truy vấn MySQL - nhưng tôi thấy nó hoàn toàn xứng đáng.
Vì User-Defined Variable
bị ràng buộc phiên trong MySQL nên cũng không cần phải lo lắng về biến @term
gây ra tác dụng phụ trong môi trường nhiều người dùng.