2016-09-07 8 views
0

ユーザ名がすでにデータベースに存在するかどうかを確認しようとしていますが、苦労しています。私はエラーが言ってます:PHPの重複ユーザのチェックに関する問題

Call to a member function bind_param() on boolean in /var/www/public/firsttry/index.php 

は、これは私がこれを実装しようとしている私のコードの一部です:

/*Check for duplicate in DB */ 
    $stmt2 = $mysqli->prepare("SELECT username FROM Users (username, password) WHERE username = ?"); 

    $stmt2->bind_param("s", $username); 
    $stmt2->execute(); 

    $rows= mysqli_num_rows($stmt2); 

    if($rows>=1){ 
     echo "<script type='text/javascript'>alert('This username is taken!')</script>"; 
    } 
    else{ 
     /*Proceed*/ 
    } 

をあなたが最初に見ることができるように、私は準備された文を書いて、バインドしよう値は$username($_POST["username"])に割り当てられます。私はクエリを実行し、影響を受ける行が返される回数を調べようとします.1以上であればアラートをスローし、それ以外の場合はユーザーが登録できます。 私はちょっと小さな間違いだとはかなり確信していますが、私はちょっとPHPに慣れていますので、私に同行してください。 SELECTステートメントがfalseを返している可能性がありますが、なぜ私はbind_paramブール値にしようとしていると文句を言うのですか?

+0

これは有効なSELECTステートメントではないため、準備が失敗しています。 –

+0

@JonStirling素早くお答えいただきありがとうございます。多分、何が間違っているか教えていただけますか? – Viktor

+0

私はそこにあるすべてのSQLチュートリアルが、おそらく最初のページにある基本的なSELECT文の正しい構文を示していると思います。 –

答えて

1

変更あなたの選択クエリ:

へのクエリ(削除(username, password))に変更してください

$stmt2 = $mysqli->prepare("SELECT username FROM Users WHERE username = ?"); 

を、文が安全コード持っている場合は、使用する必要があります。

if ($stmt2 = $mysqli->prepare("SELECT username FROM Users WHERE username = ?")) 
+0

ありがとうございます。私はあなたが言ったことをし、 'if($ rows> = 1)'ステートメントの後に 'if'ステートメントを閉じました。 mysqli_num_rows()は、パラメータ1がmysqli_result'であると予期しています。スペースのために、私はコード[ここ](http://pastebin.com/6Lmwrmq9)の私の固定部分をアップロードしました。それは重複したthoを保存することを許さない、それは動作するが、それは私が書いたこのアラートメッセージをスローしないし、その警告を示す – Viktor

0

$stmt2falseになるようにクエリが失敗すると思います。中

$stmt2 = $mysqli->prepare("SELECT username FROM Users WHERE username = ?"); 
関連する問題