Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 485362
            [titulo] => Expressões relativas em consulta utilizando PDO
            [dataCadastro] => DateTime Object
                (
                    [date] => 2014-07-12 19:45:58
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 269142
            [status] => A
            [isExample] => 
            [NomeUsuario] => William 
            [Apelido] => William (Devwilliam)
            [Foto] => 269142_20150809195205.jpg
            [Conteudo] => 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:
[code]
$buscarLocais=$conexao->prepare("SELECT * FROM exemplo WHERE nome LIKE ?");
$buscarLocais->bindValue(1, "%" . $termo . "%");
$buscarLocais->execute();
[/code]

No meu blog publiquei vários artigos sobre PDO.
[url:descricao=http://devwilliam.blogspot.com.br/]http://devwilliam.blogspot.com.br/[/url] ) )

Expressões relativas em consulta utilizando PDO

PHP
Saulo Rodrigues
   - 12 jul 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):
#Código

$sql = mysql_query("SELECT * FROM exemplo WHERE nome LIKE '%$termo%' ");

Sendo que a variável $termo recebe uma expressão relativa igual à:
#Código
 $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...
#Código
$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!

Post mais votado

William (devwilliam)
   - 12 jul 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:
#Código

$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/

1
|
0

Saulo Rodrigues
   - 13 jul 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 -> ? <-.

0
|
0

Saulo Rodrigues
   - 14 jul 2014

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

0
|
0

Saulo Rodrigues
   - 18 jul 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/

0
|
0

William (devwilliam)
   - 21 jul 2014

BLz, finalizando tópico!

0
|
0