Eu corri sobre o mesmo problema algumas vezes agora e acho que encontrei uma solução bastante simples e boa. Caso eu queira usar parâmetros várias vezes, apenas os armazeno em uma
User-Defined Variable
do MySQL .Isso torna o código muito mais legível e você não precisa de nenhuma função adicional no 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
}
A única desvantagem pode ser que você precise fazer uma consulta MySQL adicional - mas vale a pena.
Desde
User-Defined Variables
são vinculados à sessão no MySQL, também não há necessidade de se preocupar com a variável @term
causando efeitos colaterais em ambientes multiusuário.