Ir para conteúdo
Fórum Script Brasil
  • 0

Como realizar uma consulta em PDO com expressões relativas


sauloroos

Pergunta

Olá galera, seguinte...
Eu tenho um sistema pronto e funcional e estou atualizando-o para utilizá-lo com PDO, pois estou a mudar de servidor onde terei suporte para tal.
No meu sistema é possível realizar uma busca com a seguinte consulta (Por alto):
$sql = mysql_query("SELECT * FROM exemplo WHERE nome LIKE '%$termo%' ");Sendo que a variável $termo recebe uma expressão relativa igual à:
$termo = str_replace(" ","%' AND nome LIKE '%", $termo);

No caso, o usuário escreve "Casa Vermelha" e a função substitui os espaços pela expressão relativa.

Que na consulta vai parar deste jeito...
$sql = mysql_query("SELECT * FROM exemplo WHERE nome LIKE '%Casa%' AND nome LIKE '%Vermelha%' ");

A questão é, no pdo isto não funciona...

Na consulta preparada: (exemplo)
$buscarLocais=$conexao->prepare("SELECT * FROM exemplo WHERE nome LIKE ?");

$buscarLocais->bindValue(1, "%$termo%");

$buscarLocais->execute();
A variável recebe a mesma modificação, mas isto não resulta em uma query e sim em uma simples expressão no lugar do "?"
O único modo em que tentei e foi possível, foi este:
$buscarLocais=$conexao->prepare("SELECT * FROM exemplo WHERE nome LIKE '%$termo%' ");
$buscarLocais->execute();
Mas creio eu que deste modo o PDO perde seu objetivo de tornar a query segura.
Então galera, como posso resolver este probleminha?
Agradeço desde já a ajuda!
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa noite cara, voce pode tentar assim:

<?php
$sql = "SELECT * FROM exemplo WHERE TRUE ";
$array = explode(" ", $termo);
$parametros = array();
for($i = 0; $i < count($array); $i++) {
    $sql .= " AND nome LIKE :termo".$i;
    $parametros[':termo'.$i] = "%".$array[$i]."%";
}
$buscarLocais=$conexao->prepare($sql);
$buscarLocais->execute($parametros);

Mas lembrando que desta forma você estará buscando tanto expressões "Casa Vermelha" como "Vermelha Casa".

Link para o comentário
Compartilhar em outros sites

  • 0

Cara... a função que você me passou não funcionou de cara, apesar de eu achar que com um toque ali ou aqui vá funcionar.
No entanto, um parceiro me chamou atenção para a prática ruim de usar o comando LIKE '%coringa'% e me passou um artigo que resolveu o problema e também otimiza o desempenho do banco de dados. Aqui está o link do artigo para quem tiver a mesma dúvida:

Vlw pela ajuda irmão!
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...