Jump to content

Recommended Posts

Posted

Viva.

Tinha bastantes dúvidas em relação à melhor forma de pesquisar dados na BD, por exemplo, pesquisar de forma eficaz o nome de um produto.

Após algumas experiências penso que a seguinte formula é o ideal:

$pesquisa=$_REQUEST['pesquisa'];

$pesquisa=str_replace(" ","%' AND titulo LIKE '%",$pesquisa);

$result = mysql_query("SELECT *  FROM produtos WHERE titulo LIKE '%$pesquisa%'", $dbh);

Exemplificando, a variável "impressora laser" é pesquisada da seguinte forma: SELECT *  FROM produtos WHERE titulo LIKE '%impressora%' AND titulo LIKE '%laser%'

Desta forma não importa a ordem das palavras no título. Desde que estejam no título são encontradas.

Espero que seja útil aos mais iniciados.

Já agora, não troquem as aspas simples ( ' ) por duplas ( " )... A fórmula deixa de trabalhar.

portalmundial.net »» criamos sites

  • 4 months later...
Posted

Lamento mas não posso mover isto para os tutoriais.

Não é que este exemplo não seja bom para os iniciantes perceberem ou que o conceito esteja mal pensado. Simplesmente é má práctica usar esse código.

Vou explicar:

Se o utilizador inserir muitas palavras o mysql vai ter que resalizar uma operação de matching para cara uma delas para cada linha. Se o site for pequeno até pode parecer que isto funciona bem, mas deixem-no chegar a uns poucos milhares de registos... se u utilizador inserir 20 letras separadas por espaços o mysql vai passar-se completamente com tanta verificação.

Sem ofensa, para o autor, ninguem nasce ensinado. Este tipo de código é perigoso pois pode causar completos breckanços da base de dados.

Para pesquisas de texto existem os indices fulltext que são suportados pelo mysql, de resto é uma das funcionalidades mais cool do mysql.

Para sistemas de gestão de bases de dados sem suporte para indices fulltext, pode sempre ser criado um addoc.

Um exemplo de uma boa implementação deste tipo de código encontra-se no código fonte do punbb.

EDIT:Ok, alguem moveu isto para os tutoriais. Não acho que valha a pena estar a mudar outra vez para outro sítio. No entanto mantenho o conselho: evitem usar código deste tipo.

Posted

@pedrotuga, e também dá para sql injection não?

Hoje em dia 95% ( no mínimo ) das instalações do php têm a directiva GPC_magic_quotes a ON, o que afasta qualquer possibilidade de sql injection. Se esta estiver a OFF a resposta é: sim, abre uma vulnerabilidade a intrusões via sql.

Para proteger esse código poderia usar-se por exemplo a função mysql_escape_string()

Posted

Para escusar abrir outro tópico, tenho aqui uma dúvida.

Tenho 5 campos para efectuar uma pesquisa.

Autor Nome

Autor Apelido

Ano

Titulo

Editora

Acontece que se o utilizador especificar só 1 campo é super fácil efecttuar as pesquisas, mas e se ele especificar todos os campos como vou eu fazer , querendo eu fazer pesquisas individuais, ou seja em vez de fazer um sql query com todos os campos logo nao, quero fazer um para o Autor Nome, outro para Autor Apelido mas depois quero remover matchs iguais como é obvio que vao aparecer

Posted

Para escusar abrir outro tópico, tenho aqui uma dúvida.

Tenho 5 campos para efectuar uma pesquisa.

Autor Nome

Autor Apelido

Ano

Titulo

Editora

Acontece que se o utilizador especificar só 1 campo é super fácil efecttuar as pesquisas, mas e se ele especificar todos os campos como vou eu fazer , querendo eu fazer pesquisas individuais, ou seja em vez de fazer um sql query com todos os campos logo nao, quero fazer um para o Autor Nome, outro para Autor Apelido mas depois quero remover matchs iguais como é obvio que vao aparecer

não podes fazer isto?

SELECT * FROM ... WHERE AutorNome=... OR AutorApelido=... OR ...
Posted

Olá,

Para pesquisas de texto existem os indices fulltext que são suportados pelo mysql, de resto é uma das funcionalidades mais cool do mysql.

Para sistemas de gestão de bases de dados sem suporte para indices fulltext, pode sempre ser criado um addoc.

Um exemplo de uma boa implementação deste tipo de código encontra-se no código fonte do punbb.

Como usar eficientemente a opção Fulltext ? Podes dar exemplos de código (ou com a situação deste Tópico) ?

Cumprimentos,

LuBoc

Posted

O que é que estás a tentar fazer? Pesquisar em todos os campos da tabela?

Não faças isso, usa antes uma dropdown para o utilizador definir o que vai inserir (se é um autor, se é um livro) 😄

Assim poupas carga ao mysql e ainda é mais prático para o utilizador do que rever dezenas de resultados 😄

Bom trabalho  😛

Daniel Correia

Posted

Olá,

Para pesquisas de texto existem os indices fulltext que são suportados pelo mysql, de resto é uma das funcionalidades mais cool do mysql.

Para sistemas de gestão de bases de dados sem suporte para indices fulltext, pode sempre ser criado um addoc.

Um exemplo de uma boa implementação deste tipo de código encontra-se no código fonte do punbb.

Como usar eficientemente a opção Fulltext ? Podes dar exemplos de código (ou com a situação deste Tópico) ?

Cumprimentos,

LuBoc

Isso tem mais que se lhe diga do que duas ou tres linhas de código. Tens k saber em que campos queres pesquisar e criar indices fulltext. Depois a sintace até é bem simples.

Lê este artigo onde está tudo explicadinho.

http://www.phpfreaks.com/tutorials/129/0.php

Não esquecer tambem de ler o manual

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.