Expressões relativas em consulta utilizando PDO
12/07/2014
0
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
Post mais votado
12/07/2014
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
Mais Posts
13/07/2014
Saulo Rodrigues
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 -> ? <-.
13/07/2014
William
14/07/2014
Saulo Rodrigues
Obrigadão, abraços!
18/07/2014
Saulo Rodrigues
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/
Clique aqui para fazer login e interagir na Comunidade :)