2016-07-20 75 views
0

我有一個基本的註冊腳本,即時通訊編寫,我似乎無法修復它的一個小問題。MySQL&PHP,mysqli_num_rows總是返回0

好,這裏是代碼:

<?php 

//MySQLi connection 

$con = mysqli_connect("-","-","-","users"); 

if (mysqli_connect_errno()) 

{ 

echo "MySQLi Connection was not established: " . mysqli_connect_error(); 

} 

//Reading the userdata from the registerp.php page 

$usr = mysqli_real_escape_string($con,$_POST['username']); 

$email = mysqli_real_escape_string($con,$_POST['email']); 

$pass_unhashed = mysqli_real_escape_string($con,$_POST['pass']); 

$pass = password_hash($pass_unhashed, PASSWORD_DEFAULT); 

//Checking if user exists 

$check_usr = mysqli_query($con,"SELECT FROM users WHERE user_name = $usr"); 

if (mysqli_num_rows($con,$check_usr)>=1) 
{ 
echo "This Username already exists"; 
} 
else 
{ 
echo "This Username is available"; 
} 

?> 

問題是,我不能得到驗證(這樣的人不能兩次註冊相同的名字)一起工作:

$check_usr = mysqli_query($con,"SELECT FROM users WHERE user_name = $usr"); 

if (mysqli_num_rows($con,$check_usr)>=1) 
    { 
    echo "This Username already exists"; 
    } 
    else 
    { 
    echo "This Username is available"; 
    } 

始終返回「這個用戶名是可用的「,即使我用來測試它的用戶(nevondrax)在MySQL表中(它看起來像click

+0

我可以在那兒動以某種方式? – Nevondrax

+1

特定於編程和軟件開發的問題不在話下,請參閱[On-Topic](https://superuser.com.com/help/on-topic)。嘗試[所以],但請首先閱讀[我如何問一個好問題?](https://stacsuperuser.com.com/help/how-to-ask)。您可以標記您的問題,並請管理員遷移它。 – DavidPostill

+0

你需要手動驗證'mysqli_query()'成功了,mysqli不會爲你做。一旦你這樣做了,你會注意到SQL解析錯誤。 –

回答

1

您的查詢(SELECT FROM users WHERE user_name = $usr)不會選擇任何行,因此不會返回任何行,因此mysqli_num_rows始終爲零。

此外,你還缺少你的參數一些引號。現在,您的查詢應該是這樣的: SELECT FROM users WHERE user_name = dummy

正確會/應該是: SELECT * FROM users WHERE user_name = 'dummy'

如果我們把你的代碼塊,調整它,它可能是這樣的:

$check_usr = mysqli_query($con,"SELECT user_name FROM users WHERE user_name = '$usr'"); 
if($check_usr === false) 
{ 
    echo(mysqli_error($con)); 
} 
else 
{ 
    if (mysqli_num_rows($check_usr)>=1) 
    { 
     echo "This Username already exists"; 
    } 
    else 
    { 
     echo "This Username is available"; 
    } 
} 
+0

所以我將不得不查詢(選擇*從用戶WHERE user_name =美元)? – Nevondrax

+0

它是SELECT usr FROM用戶WHERE user_name = $ usr –

+0

對不起,不包括更正。什麼@devodedra寫道是正確的。您需要包含某種字段或星號以選擇每個可用字段。 所以它可能是'SELECT field FROM table'或'SELECT * FROM table'。 – Seth

1

您選擇查詢的語法錯誤。

$check_usr = mysqli_query($con,"SELECT FROM users WHERE user_name = $usr"); 

你寫的語法

$check_usr = mysqli_query($con,"SELECT fieldname FROM users WHERE user_name = $usr"); 

你錯過了給字段名SELECT