PHP中有多个$ query = mysql_query

时间:2015-02-04 00:03:52

标签: php mysql

我需要检查重复的用户名并检查它们是否已存在于数据库中。如果他们这样做,我会向他们显示错误消息。

我使用的是用户名,但我也需要使用电子邮件地址。

到目前为止,这是我的代码:

if(isset($_POST['submit'])){
    $first_name = $_POST['first_name'];
    $last_name = $_POST['last_name'];
    $username = $_POST['username'];
    $password = $_POST['password'];
    $email = $_POST['email'];
    $IP = $_SERVER['REMOTE_ADDR'];

    $query = mysql_query("SELECT username FROM Users WHERE username='".$username."'");

...

else if (mysql_num_rows($query) != 0)
    {
        echo "<p><b><center> <font color=\"red\">Username already exists.<br> </b>If you already have an account, please<a href = '../user/login.php'> click here </a> to login.</font></center></p>"; 
    }

我的问题我如何才能对电子邮件做同样的事情?我需要为$query = mysql_query("SELECT email FROM Users WHERE email='".$email."'");添加另一个电子邮件查询,并在上述代码中的第一个查询后添加吗?

我尝试过这样做,但它给了我一个错误。 感谢。

2 个答案:

答案 0 :(得分:1)

最好的方法可能是运行多个查询;您可以从索引和更好的可维护性中受益。

你不应该使用mysql_ *函数;它们已被弃用,很快就会被删除。请改为使用PDO(或mysqli)。

那就是说,至少要逃避你的价值观,以便避免SQL注入,或者如果某人有一个引用名称的话,就会出现善意错误 - D'Artagnan或O'Brien。下面的代码不能证明所有问题,但可以拦截最常见的问题。再次,PDO和准备好的查询将帮助你永无止境:

// Fields to check for duplicate.
$fields = array(
    'username' => $username,
    'email' => $email
);

$dup = false;
foreach ($fields as $field => $value) {
    $value = mysql_real_escape_string($value);
    $query = mysql_query("SELECT COUNT({$field}) AS n FROM Users WHERE {$field}='{$value}';");
    $tuple = mysql_fetch_assoc($query);
    if ($tuple['n'] > 0) {
        $dup = true;
        break;
    }
}

if ($dup) {
    echo "<p><b><center> <font color=\"red\">{$field} already exists.<br> </b>If you already have an account, please<a href = '../user/login.php'> click here </a> to login.</font></center></p>"; 
}

使用COUNT()而不是检索查询计数可能会稍微提高效率,具体取决于索引。

答案 1 :(得分:0)

foreach ($fields as $field => $value) {
$value = mysql_real_escape_string($value);
$query = mysql_query("SELECT COUNT({$field}) AS n FROM Users WHERE {$field}='{$value}';");
$tuple = mysql_fetch_assoc($query);
if ($tuple['n'] > 0) {
    $dup = true;
    break;
}

这就是你要找的东西。但要小心,它很容易受到SQL注入。