Jag har kört över samma problem ett par gånger nu och jag tror att jag har hittat en ganska enkel och bra lösning. Om jag vill använda parametrar flera gånger lagrar jag dem bara i en MySQL User-Defined Variable
.
Detta gör koden mycket mer läsbar och du behöver inga ytterligare funktioner i 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
}
Den enda nackdelen kan vara att du behöver göra en extra MySQL-fråga - men visst är det helt värt det.
Eftersom User-Defined Variables
är sessionsbundna i MySQL finns det heller ingen anledning att oroa sig för variabeln @term
orsakar biverkningar i fleranvändarmiljöer.