Několikrát jsem teď prošel stejným problémem a myslím, že jsem našel docela jednoduché a dobré řešení. V případě, že chci parametry použít vícekrát, uložím je do User-Defined Variable
MySQL .
Kód je díky tomu mnohem čitelnější a v PHP nepotřebujete žádné další funkce:
$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
}
Jedinou nevýhodou může být, že musíte provést další dotaz MySQL - ale i tak to stojí za to.
Vzhledem k tomu, že User-Defined Variable
jsou v MySQL vázané na relaci, není také třeba se starat o proměnnou @term
způsobující vedlejší účinky v prostředí s více uživateli.