Campão 0 Denunciar post Postado Abril 6, 2010 Galera, estou com um problema e não sei como resolver! Quando faço uma busca no banco de dados com caracteres especiais, ele retorna 0 (zero) linhas de resposta, por exemplo eu criei o banco abaixo com 2 produtos de teste -- phpMyAdmin SQL Dump -- version 2.10.1 -- http://www.phpmyadmin.net -- -- Servidor: localhost -- Tempo de Geração: Abr 06, 2010 as 05:06 PM -- Versão do Servidor: 5.0.45 -- Versão do PHP: 5.2.5 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Banco de Dados: `teste` -- -- -------------------------------------------------------- -- -- Estrutura da tabela `produtos` -- CREATE TABLE `produtos` ( `codigo` smallint(11) NOT NULL auto_increment, `nome` varchar(100) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=3 ; -- -- Extraindo dados da tabela `produtos` -- INSERT INTO `produtos` (`codigo`, `nome`) VALUES (1, 'ção'), (2, 'cao'); e criei a seguinte paginas <?php $host="localhost"; $user="root"; $senha=""; $db="teste"; $conecta=mysql_connect($host,$user,$senha); mysql_select_db($db,$conecta); if(isset($_POST["enviar"])){ $sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%" . $_POST["nome"] . "%'"); $q_sql = mysql_num_rows($sql); if($q_sql == 0){ echo "<p>Nenhum produto encontrado</p>"; } else{ for ($i=0 ; $i<$q_sql ; $i++){ $r_sql = mysql_fetch_row($sql); echo $r_sql[0] . " " . utf8_encode($r_sql[1]) . "<br />"; } } } ?> <form action="banco.php" method="post"> <input name="nome" type="text" /> <input type="submit" name="enviar" /> </form> Ai se eu procuro por "ç" ele não retorna produto nenhum! e se procuro por "c", ele retorna o produto que contem "ç" também!! O que esta errado!! Valew!! Abraços!!! Compartilhar este post Link para o post Compartilhar em outros sites
batatinha66 0 Denunciar post Postado Abril 6, 2010 salve os dados no banco em modo iso que você nao tera problemas, e ao exibir passe pelo utf8_encode(), e na hora de fazer a busca use o utf8_decode() ;) http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Campão 0 Denunciar post Postado Abril 7, 2010 Valew batatinha66, mas aqui não deu certo não! O que eu fiz! No campo "Nome" da tabela no bd eu coloquei um produto com o nome de "c" e outro com o nome de "& # 2 3 1 ;", sem os espaços rs, é que tava aparecendo o ç, (seria isso o ç no modo iso certo?) Ai o codigo da pagina para fazer a consulta ficou assim <?php $host="localhost"; $user="root"; $senha=""; $db="teste"; $conecta=mysql_connect($host,$user,$senha); mysql_select_db($db,$conecta); if(isset($_POST["enviar"])){ $sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE '%" . utf8_decode($_POST["nome"]) . "%'"); $q_sql = mysql_num_rows($sql); if($q_sql == 0){ echo "<p>Nenhum produto encontrado</p>"; } else{ for ($i=0 ; $i<$q_sql ; $i++){ $r_sql = mysql_fetch_row($sql); echo $r_sql[0] . " " . utf8_encode($r_sql[1]) . "<br />"; } } }?><form action="banco.php" method="post"><input name="nome" type="text" /><input type="submit" name="enviar" /></form> Ai se eu procuro por "ç" ou por "c", so aparece como resultado o produto cujo o nome é "c"! O quer sera que esta acontecendo, fiz certo o que você pediu para testar??? Valew, abraços! Compartilhar este post Link para o post Compartilhar em outros sites
Will Fernando 2 Denunciar post Postado Abril 7, 2010 ontem foram criados dois topicos sobre o mesmo assunto que indicam a mesma resposta =] de uma pesquisada evite redundancia de topicos. valww Compartilhar este post Link para o post Compartilhar em outros sites
Campão 0 Denunciar post Postado Abril 8, 2010 Aow rapazeada! Will Fernando, desculpa ai cara, da proxima vez, vou prestar mais atenção!! Bom, consegui o que eu queria, então vou postar ai o que fiz, não sei exatamente o pq, mas deu certo! Alterei a Collation do banco, da tabela e do campo em questão para "latin1_general_ci" Para realizar uma pesquisa, usei o seguinte codigo $sql = mysql_query("SELECT * FROM produtos WHERE nome LIKE CONVERT( _utf8 '%" . $palavra . "%' USING latin1 ) COLLATE latin1_general_ci"); e na hora de imprimir na tela o resultado eu usei utf8_encode Ja para realizar uma inserção no banco, usei o seguinte codigo $sql = "INSERT INTO tagindex VALUES ('','" . utf8_decode($palavra) . "')"; Bom, com isso ai, deu certo, ele diferencia, por exemplo, "ç" de "c" no resultado de uma pesquisa Abraços!! Compartilhar este post Link para o post Compartilhar em outros sites