Jump to content

Archived

This topic is now archived and is closed to further replies.

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.

Share this post


Link to post
Share on other 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á.

Share this post


Link to post
Share on other 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?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 && ?

Share this post


Link to post
Share on other sites

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

 

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

Share this post


Link to post
Share on other 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;
   }

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.