如何检查用户是否已存在于SQL数据库中?

时间:2015-04-20 16:44:07

标签: php mysql

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

    <?php
$collegeid = mysql_real_escape_string('1');
$email = mysql_real_escape_string('abc@test.com');
$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.";
}

?>

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

1 个答案:

答案 0 :(得分:4)

你正在混合mysql和mysqli函数。您不应该使用mysql函数,因为它们已被弃用,并且您似乎使用mysqli几乎所有内容,除了转义您的值并检查找到的行数。

问题是由您使用mysql_real_escape_string引起的。如果找不到mysql_*数据库连接,则会返回false,这相当于一个空字符串,因此您要检查数据库中的空值,并且每次找不到时,都会添加新的一行。

为了保护自己免受mysqli上的sql注入,你应该切换到预备语句,而不是使用mysqli_real_escape_string

修改:如果出现错误,也会mysql_num_rows返回false ...