Me he encontrado con el mismo problema un par de veces y creo que he encontrado una solución bastante simple y buena. En caso de que quiera usar parámetros varias veces, solo los almaceno en una User-Defined Variable
de MySQL .
Esto hace que el código sea mucho más legible y no necesita ninguna función adicional 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
}
El único inconveniente podría ser que necesite realizar una consulta MySQL adicional, pero en mi opinión vale la pena.
Desde User-Defined Variables
están vinculados a la sesión en MySQL, tampoco hay necesidad de preocuparse por la variable @term
causando efectos secundarios en entornos multiusuario.