Expressões relativas em consulta utilizando PDO

PHP

12/07/2014

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

Curtidas 0

Melhor post

William

William

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/
GOSTEI 1

Mais Respostas

Saulo Rodrigues

Saulo Rodrigues

12/07/2014

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 -> ? <-.
GOSTEI 0
Saulo Rodrigues

Saulo Rodrigues

12/07/2014

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

Saulo Rodrigues

12/07/2014

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/
GOSTEI 0
William

William

12/07/2014

BLz, finalizando tópico!
GOSTEI 0
POSTAR