2016-07-20 138 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