Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查SQL数据库中是否已经存在用户?_Php_Mysql - Fatal编程技术网

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

Php 如何检查SQL数据库中是否已经存在用户?,php,mysql,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'));

我正在尝试为类的项目测试一个简单的用户帐户注册页面,并且我正在尝试创建一个检查,如果用户的电子邮件已经在数据库中,则会通知用户,因此不会再次将其添加到数据库中。这是我的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.";
}

?>

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

该问题是由于您使用了
mysql\u real\u escape\u string
造成的。当未找到
mysql.*
数据库连接时,将返回
false
,这相当于一个空字符串,因此您正在检查数据库中的空值,每次未找到空值时,您都会添加一个新行

为了防止mysqli上的sql注入,您应该切换到准备好的语句,而不是使用
mysqli\u real\u escape\u string


编辑:在出现错误时返回false的还有
mysql\u num\u rows

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

该问题是由于您使用了
mysql\u real\u escape\u string
造成的。当未找到
mysql.*
数据库连接时,将返回
false
,这相当于一个空字符串,因此您正在检查数据库中的空值,每次未找到空值时,您都会添加一个新行

为了防止mysqli上的sql注入,您应该切换到准备好的语句,而不是使用
mysqli\u real\u escape\u string


Edit:如果出现错误,返回false的也是
mysql\u num\u rows

如果确定查询成功,您通常也会进行检查。请。它们不再得到维护,而是在使用。而是学习并使用。代码中发生了什么?使用mysql\u num\u rows函数但使用mysqli设置的转义字符串?到处都是。使用mysqli准备好的语句和适当的mysqli函数。在准备好的语句上加一个。否则,请改为尝试mysqli\u num\u行?为什么这个问题会得到投票?如果你确定查询成功,你通常也会检查。请。它们不再得到维护,而是在使用。而是学习并使用。代码中发生了什么?使用mysql\u num\u rows函数但使用mysqli设置的转义字符串?到处都是。使用mysqli准备好的语句和适当的mysqli函数。在准备好的语句上加一个。否则,请改为尝试mysqli\u num\u行?为什么这个问题会得到优胜劣汰?好的答案——我可以补充一点:如果你只想让这个值在一个表中存在一次(考虑这是一个主键还是不把它设置为唯一的话在这个例子中是有用的),那么考虑一下一个唯一的电子邮件密钥。如果正确地处理这些错误。好的答案——我可以补充:如果只希望在表中只存在该值(如果这是主键还是不设置它在这个实例中是唯一的)将是一个有用的补充,那么考虑为电子邮件实现唯一的密钥。当然,如果错误处理得当。