Jump to content

Recommended Posts

Posted

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?

Posted

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
Posted

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.

Posted

<?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
Posted

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;
}
Posted

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?

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.