nuno_couto Posted August 2, 2006 at 08:12 PM Report #41803 Posted August 2, 2006 at 08:12 PM 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
Drone Posted August 3, 2006 at 11:36 PM Report #42090 Posted August 3, 2006 at 11:36 PM Devias colocar na secção Tutorials ou armazem de codigo! penso que tutorials seja o mais indicado 😛
nuno_couto Posted August 5, 2006 at 01:29 AM Author Report #42395 Posted August 5, 2006 at 01:29 AM Penso que é mais aconselhado um moderador mudar para os tutoriais para não ficar repetido. portalmundial.net »» criamos sites
djthyrax Posted December 13, 2006 at 12:34 AM Report #70371 Posted December 13, 2006 at 12:34 AM Algum mod pode mover isto? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
pedrotuga Posted December 17, 2006 at 09:35 PM Report #71010 Posted December 17, 2006 at 09:35 PM 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.
djthyrax Posted December 17, 2006 at 10:34 PM Report #71023 Posted December 17, 2006 at 10:34 PM @pedrotuga, e também dá para sql injection não? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!
pedrotuga Posted December 19, 2006 at 12:24 AM Report #71293 Posted December 19, 2006 at 12:24 AM @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()
Gurzi Posted December 19, 2006 at 12:30 AM Report #71296 Posted December 19, 2006 at 12:30 AM 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
Rui Carlos Posted December 19, 2006 at 12:42 AM Report #71297 Posted December 19, 2006 at 12:42 AM 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 ... Rui Carlos Gonçalves
Gurzi Posted December 19, 2006 at 12:50 AM Report #71299 Posted December 19, 2006 at 12:50 AM LOL !! Ai meu Deus.. Brutal, esqueci-me do OR, ando aqui á 1 hora a desenvolver um algoritmo marado e com uma simples linha consigo fazer tudo! LOL que tanso 😛 Obrigado
LuBoc Posted December 19, 2006 at 01:06 AM Report #71303 Posted December 19, 2006 at 01:06 AM 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
Gurzi Posted December 19, 2006 at 01:54 AM Report #71304 Posted December 19, 2006 at 01:54 AM Mas não posso usar o OR se não devolve sempre todos os dados da tabela visto que podem existir campos em branco e um LIKE vai devolver todos.
AriOps Posted December 19, 2006 at 09:24 AM Report #71322 Posted December 19, 2006 at 09:24 AM 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
pedrotuga Posted December 19, 2006 at 11:39 PM Report #71462 Posted December 19, 2006 at 11:39 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now