Kilka razy natknąłem się na ten sam problem i myślę, że znalazłem całkiem proste i dobre rozwiązanie. W przypadku, gdy chcę użyć parametrów wiele razy, po prostu przechowuję je w MySQL User-Defined Variable
.
Dzięki temu kod jest bardziej czytelny i nie potrzebujesz żadnych dodatkowych funkcji w 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
}
Jedyną wadą może być to, że musisz wykonać dodatkowe zapytanie MySQL - ale imho jest to całkowicie tego warte.
Ponieważ User-Defined Variables
są powiązane z sesją w MySQL, nie musisz się również martwić o zmienną @term
powodując skutki uboczne w środowiskach wielu użytkowników.