Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wesley Balestrini

Erro ao realizar SELECT em MySQLI

Recommended Posts

Olá pessoal!

Estou iniciando os estudos sobre Mysqli e oop; porém já me deparo com um problema! Normalmente, quando programo em php estruturado (me corrijam se eu estiver falando errado), e me deparo com problemas como este, sei que o erro é bobo, mas, agora estou "navegando em águas misteriosas" e não sei onde piso... ​perdoem-me pelo trocadilho.

 

 

Nota: Estou usando como base de meus estudos, um post do blog do Thiago Belem; então não sei se esta é a melhor maneira de fazer. Estou aberto a sugestões.

 

Objetivo do código: Checar se name, lastName e login já estão em uso.

 

Problema encontrado: Ao realizar pesquisas no BD, nem um valor é encontrado, como resultado: o usuário é cadastrado mesmo com dados já existentes.

if($search = $connect->prepare("SELECT id FROM user WHERE name = ? && last_name = ?")){
   $search->bind_param('ss', $name,$last_name);// Substitui os ? pelas variáveis
   $search->execute();

   if(!$search->execute()){
      echo "<font color='#F60000'><h2>Erro no Arquivo <b>Register.php</b> -> Não foi possível realizar buscas. (Linha 104)</h2>";
      exit;
   }else{
      $cont = $search->num_rows;
      echo $cont; // retorna 0; por isso adiante no código, o usuário é cadastrado mesmo com nome já existente no bd.
   }
}
//[...]

PS.: Esta é uma adaptação do código original, apenas a parte que realiza o erro; se precisarem eu posto a original.

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi @Wesley,

 

O ponto é:

$cont = $search->num_rows;

Nessa linha o valor está diferente de 1. Ai cadastra o usuário.

 

 

Para resolver, vc precisa identificar se a query está correta, e se existem dados no banco que batem com a query que vc está fazendo.

 

 

Comece debugando dai, verificando o valor da variavel $cont, e verificando como a query está chegando no banco, e se existem dados lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Em primeiro lugar, obrigado por responder a minha MP e ao meu tópico!

 

Da linha 28 até a 38, eu estou verificando se existe usuário ($cont = 1) ou se por algum erro no bd existe mais de 1 ($cont > 1);

 

O problema é que já existe o usuário no bd (mesmo nome, sobrenome e login), e mesmo assim não da certo ($cont retorna 0);

 

Depois de ter cadastrado o usuário, duplicando os valores no bd, tento cadastrar novamente e ele aceita ($cont < 2 and $cont < 1);

 

Outro detalhe importante é que, já testei este código sem usar mysqli e deu tudo certo (cadastro, mensagens de erro, etc..),

Acredito que o erro esteja no select. O que você acha?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, o erro tem que estar no SELECT.

echo "SELECT id FROM user WHERE name = '{$_GET['name']}' AND last_name = '{$_GET['last_name']}'";

execute essa linha, pegue o resultado dela e rode diretamente no banco.

 

ps: Troque o seu && por AND, troque isso no seu script também

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Coloquei este código sugerido por você no final; o echo exibiu o seguinte:

 

SELECT id FROM user WHERE name = 'Teste' AND last_name = 'Um'

 

Exatamente os nomes que estão registrados no banco de dados!

Pela minha lógica, era para o código ser barrado, pois o $cont deveria ser igual a 1.

 

*Executei no phpmyadmin e foram encontrados todos os registros. (Por causa do bug do cadastro, já tem vários registros iguais)

 

Pergunta: AND é melhor que && ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é questão de melhor, é que em SQL, o E lógico é AND.

 

&& não existe, até onde me lembro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que é por causa disso aqui:

 

http://www.php.net/manual/en/mysqli-stmt.num-rows.php

if(!$search->execute()){
      echo "<font color='#F60000'><h2>Erro no Arquivo <b>Register.php</b> -> Não foi possível realizar buscas. (Linha 104)</h2>";
      exit;
   }else{
      $search->store_result(); // store result 

      $cont = $search->num_rows;
      echo $cont;
   }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.