Вече няколко пъти се сблъсках със същия проблем и мисля, че намерих доста просто и добро решение. В случай, че искам да използвам параметри няколко пъти, просто ги съхранявам в MySQL User-Defined Variable
.
Това прави кода много по-четлив и нямате нужда от допълнителни функции в 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
}
Единственият недостатък може да е, че трябва да направите допълнителна MySQL заявка - но имхо, напълно си заслужава.
Тъй като User-Defined Variables
са свързани със сесия в MySQL, също така няма нужда да се притеснявате за променливата @term
причиняват странични ефекти в многопотребителска среда.