Expressões relativas em consulta utilizando PDO

12/07/2014

0

PHP

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!
Saulo Rodrigues

Saulo Rodrigues

Responder

Post mais votado

12/07/2014

Olá Saulo, essa prática no LIKE "%valor%" de usar 'coringa' antes e depois da pesquisa você está assinando a performance da pesquisa no seu banco de dados, aconselho a colocar o coringa só no final "valor%".

Quanto a sua dúvida, concatene o 'coringa' no momento de passar o parâmetro:
$buscarLocais=$conexao->prepare("SELECT * FROM exemplo WHERE nome LIKE ?");
$buscarLocais->bindValue(1, "%" . $termo . "%");
$buscarLocais->execute();


No meu blog publiquei vários artigos sobre PDO.
http://devwilliam.blogspot.com.br/

William

William
Responder

Mais Posts

13/07/2014

Saulo Rodrigues

Olá William!

Bem, talvez não seja a forma de pesquisa mais rápida, mas eu desconheço outro modo de torná-la relativa a ponto de uma pessoa buscar por "Chuva da que estrada na cai roça" e resultar em "Chuva que cai na estrada da roça", se eu eliminar o ('%valor%') coringa isto não ocorrerá.
Se você tiver alguma indicação de método nesse sentido eu serei mto grato, não precisa explicar aqui, um artigo já caíra imensamente bem :D.

Então... no entando, não adianta concatenar os valores, já tentei isto também. De qualquer maneira a expressão entra inteira como uma string no -> ? <-.
Responder

14/07/2014

Saulo Rodrigues

Putz que interessante este artigo, vlw mesmo amigão. Vou fazer uns testes com este comando.
Obrigadão, abraços!
Responder

18/07/2014

Saulo Rodrigues

Ok, ;)

No final das contas, o método de busca que você me passou neste artigo resolveu o problema. Obrigadão, abraços!

http://pt.blog.marceloaltmann.com/en-using-the-mysql-fulltext-index-search-pt-utilizando-mysql-fulltext/
Responder

21/07/2014

William

BLz, finalizando tópico!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar