kikombat Posted February 10, 2014 at 05:53 PM Report #544696 Posted February 10, 2014 at 05:53 PM Saudações amigos, estou com uma dúvida que está a me desorientar. Estou a criar uma aplicação onde se faz necessário o uso de LIKE: Algo como em: "SELECT cod, nome FROM clientes WHERE nome LIKE '".$LIKE."%' ORDER BY c.nome asc" O problema ocorre quando o termo de pesquisa inicia-se com os caracteres "ab" , exemplo: "abigail, abilio, abraao". Com qualquer outra combinação a consulta é realizada com sucesso. Alguem já passou por experiencia similar?
bioshock Posted February 10, 2014 at 06:11 PM Report #544702 Posted February 10, 2014 at 06:11 PM Se executares a query directamente no MySQL tens o mesmo problema?
HappyHippyHippo Posted February 10, 2014 at 06:18 PM Report #544706 Posted February 10, 2014 at 06:18 PM O problema ocorre quando ... - que problema ? - que dados existem na base de dados que não estão a ser listados ? - como estas a verificar o resultado da pesquisa ? - como está a aparecer a variável $LIKE - como está a ser inicializada /atribuída essa variável ? - estás a verificar se a execução da pesquisa está a resultar em algum erro ? - se sim, que erro (mensagem) ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
kikombat Posted February 10, 2014 at 06:43 PM Author Report #544712 Posted February 10, 2014 at 06:43 PM Se executares a query directamente no MySQL tens o mesmo problema? Diretamente funciona perfeito. O problema é via php e apenas com nomes iniciados por ab, e na base de dados existem nomes como esses dois caracteres no inicio. - que problema ? - que dados existem na base de dados que não estão a ser listados ? - como estas a verificar o resultado da pesquisa ? - como está a aparecer a variável $LIKE - como está a ser inicializada /atribuída essa variável ? - estás a verificar se a execução da pesquisa está a resultar em algum erro ? - se sim, que erro (mensagem) ? a variável $like demonstra apenas o que vem do formulário de pesquisa, não coloquei todo o fonte aqui pra não ficar extenso demais. Supondo que haja 4 nomes cadastrados: 1 joao 2 maria 3 atilio 4 abilio quando o utilizador digita "a" a lógica seria retornar 2 registros sendo eles o 3 e o 4, porém não é o que acontece, somente o 3 é retornado. para j é retornado joao normalmente assim como para m que retorna maria. Somente abilio não é retornado, bem como todos os nomes possíveis iniciados por ab.
HappyHippyHippo Posted February 10, 2014 at 06:51 PM Report #544719 Posted February 10, 2014 at 06:51 PM - como estas a verificar o resultado da pesquisa ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
kikombat Posted February 10, 2014 at 07:19 PM Author Report #544723 Posted February 10, 2014 at 07:19 PM <?php $like = $_POST['nome']; // abilio esta cadastrado $con = Conecta::getConexao(); $sql = "SELECT cod, nome FROM clientes WHERE nome LIKE '" . $like. "%' ORDER BY nome asc"; $result = $con->prepare($sql); $result->execute(); while ($r = $result->fetch(PDO::FETCH_ASSOC)) { $retorno.= 'codigo =' . $r['cod']. ' e nome ='. $r['nome']; } echo $retorno; //nunca retorna abilio
HappyHippyHippo Posted February 10, 2014 at 07:24 PM Report #544725 Posted February 10, 2014 at 07:24 PM faz isto e diz o que apareceu: $sql = "SELECT cod, nome FROM clientes WHERE nome LIKE '" . $like. "%' ORDER BY nome asc"; echo $sql; IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
bioshock Posted February 10, 2014 at 07:48 PM Report #544730 Posted February 10, 2014 at 07:48 PM Fora isso, estares a usar mysqli e não dares uso aos prepared statements mais vale nem usares. $like = "{$_POST['nome']}%"; // Em princípio é assim $result = $con->prepare("SELECT cod, nome FROM clientes WHERE nome LIKE ? ORDER BY nome asc"); $result->bind_param("s", $like); $result->execute(); $result->bind_result($cod, $nome); $result->store_result(); while($result->fetch()){ echo $cod . " - " . $nome; }
kikombat Posted February 12, 2014 at 12:48 PM Author Report #545021 Posted February 12, 2014 at 12:48 PM Agradeço aos amigos pela ajuda. Descobri a causa do problema, mas não a solução. Ocorre é que a consulta estava sendo paginada de 20 em 20 registros. Tirando a paginação o problema se resolve. O que me leva a um novo problema. Como fazer paginação em consultas que tenham like?
HappyHippyHippo Posted February 12, 2014 at 01:05 PM Report #545025 Posted February 12, 2014 at 01:05 PM Tirando a paginação o problema se resolve. O que me leva a um novo problema. Como fazer paginação em consultas que tenham like? primeiro de tudo, é apresentar o código correcto aqui. afinal como estás a fazer a paginação ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
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