Ich habe das gleiche Problem jetzt ein paar Mal durchgespielt und ich denke, ich habe eine ziemlich einfache und gute Lösung gefunden. Falls ich Parameter mehrfach verwenden möchte, speichere ich sie einfach in einer MySQL User-Defined Variable
.
Dadurch wird der Code deutlich lesbarer und man benötigt keine zusätzlichen Funktionen 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
}
Der einzige Nachteil könnte sein, dass Sie eine zusätzliche MySQL-Abfrage machen müssen - aber das ist es meiner Meinung nach absolut wert.
Da User-Defined Variables
in MySQL sitzungsgebunden sind, muss man sich auch nicht um die Variable @term
kümmern Nebenwirkungen in Umgebungen mit mehreren Benutzern verursachen.