Expressões relativas em consulta utilizando PDO
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):
Sendo que a variável $termo recebe uma expressão relativa igual à:
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...
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!
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
Curtidas 0
Melhor post
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:
No meu blog publiquei vários artigos sobre PDO.
http://devwilliam.blogspot.com.br/
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
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 -> ? <-.
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
William
12/07/2014
De uma olha nesse link http://pt.blog.marceloaltmann.com/en-using-the-mysql-fulltext-index-search-pt-utilizando-mysql-fulltext/
GOSTEI 1
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!
Obrigadão, abraços!
GOSTEI 0
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/
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
12/07/2014
BLz, finalizando tópico!
GOSTEI 0