Ho riscontrato lo stesso problema un paio di volte e penso di aver trovato una soluzione abbastanza semplice e buona. Nel caso in cui desideri utilizzare i parametri più volte, li memorizzo semplicemente in una User-Defined Variable
MySQL .
Questo rende il codice molto più leggibile e non hai bisogno di alcuna funzione aggiuntiva in 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
}
L'unico aspetto negativo potrebbe essere che è necessario eseguire una query MySQL aggiuntiva, ma imho ne vale assolutamente la pena.
Dato che User-Defined Variables
sono legati alla sessione in MySQL, inoltre non è necessario preoccuparsi della variabile @term
causando effetti collaterali in ambienti multiutente.