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

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar