mysql phpmyadmin用户输入比较数据库

mysql phpmyadmin用户输入比较数据库,php,mysql,Php,Mysql,大家好,我是php和mysql的新手,我目前正在尝试检查用户输入&用户名,如果数据库中已经存在相同的用户名,以及用户输入$email 我有下面的代码,我试着用一行代码来回响和比较用户输入和从数据库获取行/数据。我能够验证它是否达到了 行echo$email.“比较”。$result2;两者都相同,但它传递条件$email==$result2,其中result2是从数据库获取电子邮件。你能告诉我怎么了吗?提前谢谢 $extract= mysql_query("SELECT * FROM users

大家好,我是php和mysql的新手,我目前正在尝试检查用户输入&用户名,如果数据库中已经存在相同的用户名,以及用户输入$email

我有下面的代码,我试着用一行代码来回响和比较用户输入和从数据库获取行/数据。我能够验证它是否达到了 行echo$email.“比较”。$result2;两者都相同,但它传递条件$email==$result2,其中result2是从数据库获取电子邮件。你能告诉我怎么了吗?提前谢谢

$extract= mysql_query("SELECT * FROM users");
$resultq = mysql_num_rows($extract);
while($row= mysql_fetch_array($extract))
{

    $result = $row['username'];
    $result2 = $row['email'];

    echo $email."COMPARE".$result2;

    if($username == $result) 
    {
         echo "<script type=\"text/javascript\">alert('Username Already Taken')</script>";
         echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
         break;

    }
    else if ($email == $result2)
    {
         echo "<script type=\"text/javascript\">alert('Email Already Registered')</script>";
         echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
         break;
    }
    else
    {
        //continues to execute the loop until no more to fetch
    }
$extract=mysql\u查询(“从用户中选择*);
$resultq=mysql\u num\u行($extract);
while($row=mysql\u fetch\u数组($extract))
{
$result=$row['username'];
$result2=$row['email'];
echo$email.“比较”。$result2;
如果($username==$result)
{
回显“警报('用户名已被占用')”;
回声“;
打破
}
else if($email==$result2)
{
回显“警报('电子邮件已注册')”;
回声“;
打破
}
其他的
{
//继续执行循环,直到不再提取
}

我将使用另一种方法在SQL查询中进行搜索。 SQL在这种搜索上更好(而且性能更好)

此查询不需要while循环:

SELECT *
FROM users
WHERE username = '<input username here>'
OR email = '<input email here>'

您能再添加一点调试吗?请尝试
var\u dump($email)
var\u dump($result2),而不是“echo()”
。此外,如果您想查看用户名或电子邮件是否被占用,您可以在查询中这样做,并让数据库告诉您它们是否可用-您只需要添加一个WHERE子句。您正在运行while循环。只需在if和else if中都添加break语句,不会显示两个结果my statemetn有什么问题?fetch array不起作用?我有break@user1502952.Yep。SQL正是为了这个目的!PDO本身也会给+1,同时你也可以提到SQL注入。我认为所有PHP mysql问题都应该附带一个关于PDO和SQL注入的标准注释……PDO和MySQLi的主要优点是,如果使用得当的话y(准备好的语句),它已经受到SQL注入的保护…@MartyMcVry您可以将我的语句转换为PDO作为exmaple吗?作为指南吗?谢谢:SUsername或电子邮件已经被使用了,它不是很具体吗?像检查用户名和电子邮件的单独条件一样?您必须在
if(count($result)>0中添加该条件{
语句。
$result
包含一个数组,因此您可以使用
foreach
循环遍历找到的结果。在foreach循环中检查用户名或电子邮件。-请参阅编辑
// Database connection
// -------------------
// I usually put this in a seperate file and include it.
try {
    $dbconn = new PDO('mysql:dbname=database;host=localhost', 'username', 'password');
} catch (PDOException $e) {
    die('Connection failed: ' . $e->getMessage());
}

// Prepare statement
// -----------------
// Build query using question mark parameters
$sql = "SELECT * FROM users WHERE username = ? OR email = ?";
// Create prepared statement
$sth = $dbconn->prepare($sql);

// Execute statement
// -----------------
// The parameters are automatically changed into your input data
$sth->execute(array($username, $email));

// Put all affected rows in $result (array!)
$result = $sth->fetchAll();

// Check array contents
// --------------------
if (count($result) > 0) {
    // Loop through results
    foreach ($result as $row) {
        if ($username == $row['username']) {
            echo "<script type=\"text/javascript\">alert('This username is already taken!')</script>";
            echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
        } else { // If username doesn't match, it has to be the e-mailaddress
            echo "<script type=\"text/javascript\">alert('This e-mailaddress has already registered!')</script>";
            echo "<meta http-equiv=\"refresh\" content=\"0;url=6signup.html\" />";
        }
    }
} else {
    /* Code to execute when not registered yet */
}