J'ai rencontré le même problème plusieurs fois maintenant et je pense avoir trouvé une solution assez simple et bonne. Au cas où je voudrais utiliser des paramètres plusieurs fois, je les stocke simplement dans une MySQL User-Defined Variable
.
Cela rend le code beaucoup plus lisible et vous n'avez pas besoin de fonctions supplémentaires en 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
}
Le seul inconvénient est peut-être que vous devez effectuer une requête MySQL supplémentaire - mais à mon humble avis, cela en vaut vraiment la peine.
Depuis User-Defined Variables
sont liés à la session dans MySQL, il n'y a pas non plus besoin de s'inquiéter de la variable @term
provoquant des effets secondaires dans les environnements multi-utilisateurs.