2017-03-16 9 views
0

私は自分のウェブサイト用のログインアカウントシステムを作成しようとしています。ユーザーが登録すると、データベースにアカウントがあるかどうかを確認します。私は「check_user_exists」と呼ばれる機能を作成し、ここにしかし、私はそれが私がデータベース内の値がすでに存在していることを知っても、偽のたびに返し、これを実行して行くときにSQLの準備文が正しい応答を与えないのはなぜですか?

function check_account_exists($username, $conn){ 
    if($stmt = $conn->prepare("SELECT * FROM users WHERE username=?")){ 
     $stmt->bind_param('s', $username); 
     $stmt->execute(); 
     echo $stmt->num_rows; 
     if($stmt->num_rows == 1){ 
      return true; 
     }else{ 
      return false; 
     } 
    }else{ 
     //couldn't prepare statement 
     return false; 
    } 
} 

ためのコードです。私はこれまでにMySQLのエラーはありませんでしたが、エラーログをチェックしてもエラーは表示されません。私はecho stmt->num_rows;を追加しましたが、常に0を出力します。何が問題なのですか?

+0

$ stmtの値がSQLの準備と等しい場合ではなく、$ stmtが正しく準備されているかどうかをテストしています。 – blendy

+2

@ arif_suhail_123 phpの中で変数を宣言することができます – JapanGuy

+0

@ arif_suhail_123それは混乱しますが、たくさん練習されています – JapanGuy

答えて

1

よく分かりません$stmt->execute();の後に$stmt->store_result();を使用する必要があります。これは正しい応答を妨げていました。

+0

まあ、私は無意識のうちに結果がバッファされていると想定していましたが、実際には結果が得られない可能性があります。何も想定しないことを思い出させてくれてありがとう! –

+0

@FélixGagnon-Grenierこれは本当に私がもっと多くの研究を行い、その1行のコードを他の関数 'login_check'に入れて修正するまで私を混乱させました。 SQLコードが正しいこと、そしてそのDBテーブルにその行があることを100%確信していたからです。私はphpMyAdminをチェックして、その行を示した。あなたがそれをする必要があるのは不思議ですが、理にかなっています。あなたの時間と迅速な対応に感謝します。 – blendy

関連する問題