Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Use o parâmetro vinculado várias vezes


Eu corri sobre o mesmo problema algumas vezes agora e acho que encontrei uma solução bastante simples e boa. Caso eu queira usar parâmetros várias vezes, apenas os armazeno em uma User-Defined Variable do MySQL .
Isso torna o código muito mais legível e você não precisa de nenhuma função adicional no 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
}

A única desvantagem pode ser que você precise fazer uma consulta MySQL adicional - mas vale a pena.
Desde User-Defined Variables são vinculados à sessão no MySQL, também não há necessidade de se preocupar com a variável @term causando efeitos colaterais em ambientes multiusuário.