2015-04-20 85 views
0

我想为类的项目测试一个简单的用户帐户注册页面,并且我正在尝试创建一个检查,通知用户他们的电子邮件是否已经在数据库中,因此不会再添加到它。这是我的PHP代码。如何检查用户是否已经存在于SQL数据库中?

<?php 
$collegeid = mysql_real_escape_string('1'); 
$email = mysql_real_escape_string('[email protected]'); 
$password = mysql_real_escape_string(md5('test1')); 
$name = mysql_real_escape_string('Test Test'); 
$bday = mysql_real_escape_string('1900-01-01'); 
$class = mysql_real_escape_string('Freshman'); 
//echo "<p>Test</p>"; 
$servername = "localhost"; 
$username = redacted; 
$serverpassword = redacted; 
$dbname = redacted; 

$conn = new mysqli($servername, $username, $serverpassword, $dbname); 

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 

$checkquery = "SELECT * FROM Student WHERE Email = '$email'"; 
$insertquery = "INSERT INTO Student (CollegeID, Name, Birthday, Email, Classification, Password) VALUES ('$collegeid', '$name', '$bday', '$email', '$class', '$password')"; 

if (mysql_num_rows($conn->query($checkquery)) > 0) 
{ 
    echo "Error: Email already in use"; 
} 

else 
{ 
    $conn->query($insertquery); 
    echo "Account Created."; 
} 

?> 

但是,无论用户是否在数据库中,它总是会告诉我帐号已创建。

+0

确定查询成功,你通常会检查为好。 – adeneo

+0

请[停止使用'mysql_ *'函数](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)。他们不再被维护,并[正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。了解[准备的陈述](http://en.wikipedia.org/wiki/Prepared_statement),并使用[PDO](http://jayblanchard.net/demystifying_php_pdo.html)。 –

+0

你的代码是怎么回事?你用mysql_设置的转义字符串,使用mysql_num_rows函数,但使用mysqli?它到处都是。使用mysqli准备的语句和适当的mysqli函数。 – Devon

回答

4

你在混合mysql和mysqli函数。你不应该使用mysql函数,因为它们被弃用,你似乎几乎所有的东西都使用mysqli,除了转义你的值和检查找到的行数。

该问题是由您使用mysql_real_escape_string引起的。如果找不到mysql_*数据库连接,则返回false,它与空字符串等效,因此您正在检查数据库中的空值,并且每次没有找到该值时,都会添加一个新行。

为了防止在mysqli上进行sql注入,您应该切换到准备语句而不是使用mysqli_real_escape_string

编辑:这也是mysql_num_rows是返回一个错误的情况下,假的... ...

+1

好的答案 - 我可以补充一下:考虑为电子邮件实现一个唯一的密钥,如果您只希望该值在表中存在一次 - http://www.w3schools.com/sql/sql_unique.asp(无论这是主键或不将它设置为唯一的将在这种情况下有用) –

+0

@MattBarber这将是一个有用的补充。如果错误得到正确处理,当然。 – jeroen

相关问题