2016-09-07 52 views
0

我試圖檢查用戶名是否已經存在於數據庫中,但我正在努力。我得到一個錯誤說:用php檢查MySQL中的重複用戶的問題

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

更改您的選擇查詢:

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

而且你應該使用if語句有一個安全碼:

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

謝謝。我做了你所說的,並且在if($ rows> = 1)語句之後關閉了if語句。我現在不斷收到警告,說'mysqli_num_rows()期望參數1是mysqli_result'。爲了空間的緣故,我上傳了我的固定部分代碼[here](http://pastebin.com/6Lmwrmq9)。它不允許保存重複的壽,它的工作原理,雖然它不會拋出我寫的警報消息,並顯示警告 – Viktor

0

我認爲您的查詢失敗,因此$stmt2變爲false

請改變你的查詢(刪除(username, password)):在

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